Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249686 (11122)
  Suchen
 Zurück zur Übersicht
 AutorThema: OpenPrinter aus WinAPI Aufruf
Stefan Schnell
Datum:26.05.01 10:57 Antwortenals Email verschicken (mail@stschnell.de) 


Hallo Community,
habe mal folgende Frage.
Definiere die Funktion

Def @OpenPrinter(3) !"WINSPOOL.DRV", "OpenPrinterA"

und dazu folgende Variablen

Declare PrinterName$, PrinterHandle%, OpenPrinterResult%

und dann den Aufruf

Let PrinterName$ = @Add$("WINFAX", @Chr$(0))

Let OpenPrinterResult% = @OpenPrinter(@Addr(PrinterName$), @Addr(PrinterHandle%), 0)

Leider liefert OpenPrinterResult% immer nur 0 zurück, d. h. Funktion nicht erfolgreich ausgeführt. GetLastError ermittelt einen nicht korrekten Aufruf der Funktion, obwohl ein PrinterHandle% ermittelt wird.
Wo mache ich einen Fehler?

Danke und Tschüss
Stefan




Thorsten
Datum:26.05.01 14:10 Antwortenals Email verschicken (galaxy@mrk-soft.de) 


Hi,

hier mal ein Code, wo es funktioniert,
Rückgabewert ist hier 1 bei Winfax.
Getestet mit Profan 7.0, sollte aber auch
mit 5. 0 oder 6.0 funktionieren.

cls

Def OpenPrinter(3) !"WINSPOOL.DRV", "OpenPrinterA"
Def ClosePrinter(1) !"WINSPOOL.DRV", "ClosePrinter"

declare prthandle&, prthandle#, prtname#

dim prtname#,255
dim prthandle#,4
string prtname#,0="winfax" 'name des printers

print OpenPrinter(prtname#,prthandle#,0) '1 = ok, 0 = fehler

prthandle& = long(prthandle#,0) 'rückgabewert des handles für object

dispose prtname#
dispose prthandle#

ClosePrinter(prthandle&)
waitkey



Roland G. Hülsmann
Datum: 27.05.01 11:10 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Du mußt anstelle der Integervariablen (%) die LongInt-Variablen (&) benutzen dann geht es. (Das gilt im übrigen für ALLE API-Funktionen.) Folgender Code gibt bei mir zunächst eine "1" und dann das Printerhandle aus:

Def @OpenPrinter(3) !"WINSPOOL.DRV", "OpenPrinterA"

Declare PrinterName$, PrinterHandle&, OpenPrinterResult&

CLS

Let PrinterName$ = @Add$("HP OfficeJet Serie 600 Drucker", @Chr$(0))

Let OpenPrinterResult& = @OpenPrinter(@Addr(PrinterName$), @Addr(PrinterHandle&), 0)

Print OpenPrinterResult&
Print PrinterHandle&


WaitInput

End



 Zurück zur Übersicht