![]() |
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. |
Re: Frage zu WinExec
Zitat:
|
Re: Frage zu WinExec
Und benutze nicht
![]() ![]() |
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 |
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.
|
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:
Leider funktioniert der Aufruf ShellExecute mit den von mir übergebenen Parametern immer noch nicht ! Ich finde den Fehler einfach nicht !!
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)); 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] |
Re: Frage zu WinExec
Zitat:
|
Re: Frage zu WinExec
Zitat:
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; |
Re: Frage zu WinExec
steht in S auch wirklich der string drin den du haben willst ?
|
Re: Frage zu WinExec
Zitat:
Probier's doch aus. :coder: |
Re: Frage zu WinExec
na dann fahr ich halt meinen anderen PC hoch und komm ausm bett raus ;)
|
Re: Frage zu WinExec
Zitat:
|
Re: Frage zu WinExec
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Params: string; Return: HINST; begin Params := 'printui.dll,PrintUIEntry' + ' /if' + ' /b "Testdrucker"' + ' /f "' + GetEnvironmentVariable('windir') + '\inf\ntprint.inf"' + ' /r "lpt1:"' + ' /m "AGFA-AccuSet v52.3"'; Return := ShellExecute(Handle, 'open', 'rundll32', PChar(Params), nil, SW_SHOWNORMAL); if (Return <= 32) then ShowMessage(SysErrorMessage(Return)); end; |
Re: Frage zu WinExec
nönö ;)
also bei mir gehts.. habs 1:1 übernommen bin eingeloggt als administrator in Windoof 2003 deutsch Delphi6 ent button geklickt -> mauszeiger(sanduhr) -> Testdrucker in "Drucker" erschienen |
Re: Frage zu WinExec
und in S steht:
Code:
printui.dll,PrintUIEntry /if /b "Testdrucker" /f C:\WINDOW3\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"
|
Re: Frage zu WinExec
Hätte Drysek ganz einfach gefragt wie man einen Drucker per API Aufruf installiert, dann hätte er von mir auch eine eleganteres Beispiel bekommen.
|
Re: Frage zu WinExec
[OT]
da kenn ich n nettes sprichwort :) "hätte der fuchs nicht geschissen hätte er einen hase gefangen" oder in meiner 2. muttersprache: "hät do fuchs net gschissn hätto n has gfanga hailandzacknochomool" [/OT] |
Re: Frage zu WinExec
Hi danke für euer Feedbacks es funktioniert jetzt auch bei mir !!!
Tausend Dank mfg Drysek p.s. wenn ich auf eure Antwort Zeit gucke ohh Mann !! ;) mfg Drysek |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
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