Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Frage zu WinExec (https://www.delphipraxis.net/30200-frage-zu-winexec.html)

Drysek 21. Sep 2004 22:23


Frage zu WinExec
 
Hallo,

ich möchte einen Drucker unter Windows hinzufügen das funktioniert auch alles wunderbar in der Komandozeile.

Hier der Aufruf:

rundll32 printui.dll,PrintUIEntry /if /b "Testdrucker" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"


Wenn ich das gleiche aber mit WinExec aufrufe bekomme ich einen Fehler der mir nichts sagt:
"Der Vorgang konnte nicht abgeschlossen werden"

str := 'rundll32 printui.dll,PrintUIEntry /if /b "Testdrucker" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"';

WinExec(str, SW_NORMAL);

Ich habe es auch schon mit ShellExcecute probiert aber leider auch ohne Erfolg

Ich habe die Vermutung das die Fehlerquelle in den Parametern liegt,
wenn ich Win- und ShellExecute aufrufe.

Die AddPrinter Funktion der WinApi wird anscheinend nicht unter XP unterschtützt.

Währe toll wenn mir jemand einen Lösungsvorschlag geben könnte.

NicoDE 21. Sep 2004 22:26

Re: Frage zu WinExec
 
Zitat:

Zitat von Drysek
das funktioniert auch alles wunderbar in der Komandozeile.

Auf der Kommandozeile werden die Umgebungsvariablen (%windir%) ersetzt. Sieh Dir mal ExpandEnvironmentStrings u.s.w. an.

Luckie 21. Sep 2004 22:39

Re: Frage zu WinExec
 
Und benutze nicht MSDN-Library durchsuchenWinExec, sondern MSDN-Library durchsuchenShellexecute, da WinExec nur noch wegen der abwärtskompatibilität zu 16-Bit Programmen vorhanden ist und von MS als obsolet gekennzeichnet ist.

Drysek 21. Sep 2004 23:15

Re: Frage zu WinExec
 
Hi dann frage ich mal anders, warum klappt folgender Aufruf nicht !

ShellExecute(Form1.Handle, 'open', 'rundll32 printui.dll,PrintUIEntry', '/if /b "Test Printer2" /f "%windir%\inf\ntprint.inf" /r "TestPort:" /m "Apple Color LW 12/660 PS', '', SW_NORMAL);

Wenn ich ihn so ausführe passiert anscheinned rein gar nix, ich vermute aber das der Befehl
nicht bis zu Ende ausgeführt wird, sondern vorher abgebrochen wird.

Also was mache ich falsch !!! Kann ja eigentlich nicht so schwer sein !!

mfg

Drysek

Luckie 21. Sep 2004 23:20

Re: Frage zu WinExec
 
Das hat dir doch Nico gerade erklärt: Die Umgebungsvariable %windir% wird von "Ausführen" automatisch aufgelöst, von Shellexecute aber nicht. Und wie du das Problem löst hat er dir auch gesagt.

Drysek 22. Sep 2004 00:34

Re: Frage zu WinExec
 
Hi, erstma Danke das Ihr euch mit meiner Fragestellung beschäftigt !

Hab euren Ratschlag beherzigt und habe die Systemvariable mit folgendem Code umgewandelt !


Delphi-Quellcode:
var
   strPath : String;
   Buf : array[0..MAX_PATH] of Char;
   x : THandle;
begin
   strPath := '%windir%';
   ExpandEnvironmentStrings(PCHAR(strPath), Buf, sizeof(Buf));
   strPath := ' /if /b "Test Printer2" /f "' + Buf + '\inf\ntprint.inf" /r "TestPort:" /m "Apple Color LW 12/660 PS"';
   x := ShellExecute(0, 'open', 'rundll32 printui.dll,PrintUIEntry', Pchar(strPath), NIL, SW_NORMAL);
   ShowMessage(IntToStr(x));
Leider funktioniert der Aufruf ShellExecute mit den von mir übergebenen Parametern immer noch nicht ! Ich finde den Fehler einfach nicht !!
Wäre nett wenn Ihr mir bitte noch einmal nen Tipp geben könntet ! Vielleicht liegts ja an der Parameterübergabe an ShellExecute ??

Ach ja ShellExecute gibt den FehlerCode 2 zurück -> ERROR_PATH_NOT_FOUND

mfg

Drysek

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

NicoDE 22. Sep 2004 00:47

Re: Frage zu WinExec
 
Zitat:

Zitat von Drysek
Code:
ShellExecute(0, 'open', [color=red]'rundll32 printui.dll,PrintUIEntry'[/color], Pchar(strPath), NIL, SW_NORMAL);

Die rot markierte Datei gibt es auf Deinem System sicher nicht (sollte nur 'rundll32' sein). Die Bezeichnung strPath ist etwas unglücklich gewählt für einen String der die Parameter enthält...

Sprint 22. Sep 2004 01:09

Re: Frage zu WinExec
 
Zitat:

Zitat von Drysek
Leider funktioniert der Aufruf ShellExecute mit den von mir übergebenen Parametern immer noch nicht ! Ich finde den Fehler einfach nicht !!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  Param = 'printui.dll,PrintUIEntry /if /b "Testdrucker" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"';
var
  S: String;
begin

  SetLength(S, ExpandEnvironmentStrings(Param, nil, 0));
  SetLength(S, ExpandEnvironmentStrings(Param, PChar(S), Length(S)) - 1);
  ShellExecute(0, 'open', 'RunDLL32.exe', PChar(S), nil, SW_SHOWNORMAL);

end;

supermuckl 22. Sep 2004 02:36

Re: Frage zu WinExec
 
steht in S auch wirklich der string drin den du haben willst ?

Sprint 22. Sep 2004 02:43

Re: Frage zu WinExec
 
Zitat:

Zitat von supermuckl
steht in S auch wirklich der string drin den du haben willst ?

Da musste ich echt lachen, als ich deine Frage gelesen hab. :)
Probier's doch aus. :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz