![]() |
Druckerstatus abfragen
Hallo Ihr Lieben,
über das Thema habe ich nun schon einiges gelesen, das meiste endet aber irgendwie mit Win98. Gibt es eine Möglichkeit den Status eines Druckers Windows 7 und höher, egal ob dieser über USB oder Netzwerk erreichbar ist, mit oder ohne Spooler betrieben wird, mit Delphi abzufragen? Meine Versuche mit OpenPrinter/GetPrinter und PRINTER_INFO_2 haben eigentlich immer den Status 0 geliefert, egal, ob mein Drucker angeschlossen war oder nicht. Interessant wäre für mich, ist der Drucker online oder offline und hat er Papier, also nur solch grundlegende Infos. Danke für Eure Hilfe. |
AW: Druckerstatus abfragen
Du könntest es ja mal über SNMP versuchen. Bestimmte MIBs sind da genormt. Vielleicht kannst du damit was anfangen.
|
AW: Druckerstatus abfragen
Ich sag es mal so:
Wenn ich auf unserem Netzwerkdrucker was drucke, dann bekommt selbest der Spooler nix mit. * ist der andere Rechner an und der Drucker aus, dann wird das zumindestens gedruckt, wenn man den Drucker anschaltet (der andere Rechner-Spooler merkt sich das) * ist der andere Rechner aus, dann geht der Druck ins Nirvana ... keine Ausdruck (nach anschalten des Rechners/Druckers) und vorallem auch keinerlei Fehlermeldung. |
AW: Druckerstatus abfragen
Das Abfragen der Druckereigenschaften funktioniert nach meinem Kenntnisstand nur, wenn vorher das Printerhandle initialisiert, sprich: ein Druckauftrag mit Printer.BeginDoc eingeleitet wird. Anschließend kann man über das Handle und GetDeviceCaps Informationen (DPI, Papiergröße, etc. )zum Drucker abfragen. So mach ich das jedenfalls :wink:
Die von Dir gewünschten Informationen sind (soweit ich weiß) nicht verfügbar; wenn der Drucker offline ist, wird das Handle nicht gültig sein; wenn der Drucker kein Papier hat, wird er nicht online sein (so ist das jedenfalls bei meinen Druckern). |
AW: Druckerstatus abfragen
Ist der Drucker lokal angeschlossen?
Wenn ja, hast du eine Chance, ansonsten bekommst Du irgendeine Rückmeldung die mit der Wirklichkeit nicht viel zu tun haben muß. Gruß K-H |
AW: Druckerstatus abfragen
Zitat:
|
AW: Druckerstatus abfragen
Vielleicht kannste mit WMI was reißen?
Arbeite dich mal in den WMI-Delphi Code Generator ein ( ![]()
Delphi-Quellcode:
//-----------------------------------------------------------------------------------------------------
// This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.9.9.350 // http://code.google.com/p/wmi-delphi-code-creator/ // Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/ // Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2015 //----------------------------------------------------------------------------------------------------- // // LIABILITY DISCLAIMER // THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. // YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS, // DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE. // //---------------------------------------------------------------------------------------------------- program GetWMI_Info; {$APPTYPE CONSOLE} uses SysUtils, ActiveX, ComObj, Variants; // Stellt eine Druckerwarteschlange und die zugehörigen Einstellungen dar. procedure GetMSFT_PrinterInfo; const WbemUser =''; WbemPassword =''; WbemComputer ='localhost'; wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\StandardCimv2', WbemUser, WbemPassword); FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM MSFT_Printer','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin Writeln(Format('Name %s',[String(FWbemObject.Name)]));// String Writeln(''); FWbemObject:=Unassigned; end; end; begin try CoInitialize(nil); try GetMSFT_PrinterInfo; finally CoUninitialize; end; except on E:EOleException do Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); on E:Exception do Writeln(E.Classname, ':', E.Message); end; Writeln('Press Enter to exit'); Readln; end. |
AW: Druckerstatus abfragen
Zitat:
|
AW: Druckerstatus abfragen
Zitat:
|
AW: Druckerstatus abfragen
Wenn du Infos von Netzwerkdruckern brauchst, musst du unbedingt die dwFlags der PrinterOptions auf PRINTER_OPTION_NO_CACHE setzen.
Delphi-Quellcode:
...
hPrinter : THandle; vPO : TPrinterOptions; begin ... vPO.dwFlags := PRINTER_OPTION_NO_CACHE; vPO.cbSize := SizeOf(vPO); OpenPrinter2(PChar(PrinterName), @hPrinter, Nil, @vPO); ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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