Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drucker installation (printui.dll funktionen direkt einbinden ohne Shellexec) (https://www.delphipraxis.net/188433-drucker-installation-printui-dll-funktionen-direkt-einbinden-ohne-shellexec.html)

Andreas2k 3. Mär 2016 12:31

Drucker installation (printui.dll funktionen direkt einbinden ohne Shellexec)
 
Hallo,
mein Programm installiert bzw. deinstalliert Drucker mit Treibers aus einer oemsetup.inf.

Bisher mach ich das immer per Umweg über ShellExec und rundll32

Beispiel:
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /if /b "Mein Drucker" /f \inf\oemsetup.inf /r "MeinPort" /m "HP Laserjet 4 PCL5e"

siehe auch
https://technet.microsoft.com/de-de/...=ws.10%29.aspx


Das funktioniert zu 99% auch doch immer wieder bleibt mein Programm hängen weil PRINTUI.DLL eine Fehlermeldung anzeigt die ich nicht selbst abfangen kann.

Code:
Der Vorgang konnte nicht abgeschlossen werden (Fehler 0x000000c)

Der Zugriffscode ist unzulässig.
Daher habe ich mir gedacht das es besser wäre die Funktion PrintUIEntry direkt aus printui.dll in mein Programm zu laden. Nur habe ich keine Ahnung wie ich das am besten mache weil ich keine Infos über die Struktur (Parameter und Rückgabe Typ) der Funktion gefunden habe. Auch bei MS gibt es nur die Rundll32 Beispiele.

Vielleicht gibt's auch ne besseren weg folgende Funktionalität in Delphi umzusetzen:
- Anzahl von xx Drucker installieren durch Angabe des Druckernamens, Anschlussnamen und der Treibeinformationen (.inf)
- Anzahl von xx Druckern deinstallieren durch Angabe des Druckernamens
- Speichern der Druckereinstellungen in einer Datei durch Angebe des Druckernamens + Zieldatei
- Wiederherstellen der gespeicherten Druckereinstellungen durch Angabe des Druckernamens + Quelldatei
- Anlegen von TCP/IP Druckeranschlüssen durch Angabe des Protokolls LPR/IPP, Queue, Port

Neutral General 3. Mär 2016 12:38

AW: Drucker installation (printui.dll funktionen direkt einbinden ohne Shellexec)
 
Hallo,

Bei PInvoke gibt es interessanterweise Informationen zur Signatur:

http://pinvoke.net/default.aspx/prin...tUIEntryW.html
=>
Delphi-Quellcode:
procedure PrintUIEntryW(hWnd: THandle; hInst: HINST; lpszCmdLine: WideString; nCMDShow: Integer); stdcall; external 'printui.dll';

Damit sollte das machbar sein.

EDIT: Wobei ich gerade mal getestet habe und ich befürchte die Meldungen kannst du trotzdem nicht abfangen :/

EDIT2: Besser wäre es wohl wenn du direkt die entsprechenden API Funktionen benutzt:

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Andreas2k 7. Mär 2016 12:36

AW: Drucker installation (printui.dll funktionen direkt einbinden ohne Shellexec)
 
Danke für die Antwort!
Sieht etwas kompliziert aus, vorallem habe ich da bei Addprinter nichts gefunden wo man die Treiber (oemsetup.inf) übergeben kann, dafür angaben wie Printprocessor usw.

Ich habe aber den Fehler bei mir endlich gefunden. Es war eigentlich kein Fehler in meinem Programm sondern ein fehlender Parameter beim speichern und zurückschreiben der Druckereinstellungen. Der Fehler lies sich also auch per Kommandozeile reproduzieren :lol:

Trotzdem Danke für den Tipp mit der API!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.

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