Laden...

Prüfen ob Standard Drucker überhaupt eingeschaltet ist

Letzter Beitrag vor einem Jahr 6 Posts 717 Views
Prüfen ob Standard Drucker überhaupt eingeschaltet ist

Hallo... versuche schon eine Weile ein eigentlich wohl banales Problem zu lösen, das mir aber schon graue Harre bereitet!

Möchte in meinem C# Programm vor dem Drucken prüfen, ob der Standard Netzwerkdrucker (WLAN) überhaupt eingeschaltet ist.

Hab schon so einiges aus dem Netz probiert, leider immer ohne Erfolg... egal ob on oder off, bekomme immer die gleichen Werte auf meinem System (Windows 11 und Epson ET-2820) retour.

Hat hier vielleicht jemand eine Lösung für mich?

Nachfolgend mein Versuchs Source:

static void PrintProps(ManagementObject o, string prop)
{
   try { Console.WriteLine(prop + "|" + o[prop]); }
   catch (Exception e) { Console.Write(e.ToString()); }
}

static void Main(string[] args)
{
   ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer where Default=True");

   foreach (ManagementObject printer in searcher.Get())
   {
       string printerName = printer["Name"].ToString().ToLower();
       Console.WriteLine("Printer :" + printerName);
       PrintProps(printer, "Caption");
       PrintProps(printer, "ExtendedPrinterStatus");
       PrintProps(printer, "Availability");
       PrintProps(printer, "Default");
       PrintProps(printer, "DetectedErrorState");
       PrintProps(printer, "ExtendedDetectedErrorState");
       PrintProps(printer, "ExtendedPrinterStatus");
       PrintProps(printer, "LastErrorCode");
       PrintProps(printer, "PrinterState");
       PrintProps(printer, "PrinterStatus");
       PrintProps(printer, "Status");
       PrintProps(printer, "WorkOffline");
       PrintProps(printer, "Local");
       Console.ReadKey();
   }
}

Nicht alle Drucker unterstützen das Attribut "WorkOffline".

Du könntest auch mal versuchen auf PrintQueue.IsOffline zuzugreifen. Dazu erstelle ein PrintServer -Objekt (s. Beispiel dort) und greife dann auf die PrintQueue-Eigenschaft zu.

Ich denke aber, daß diese intern auf dieselbe Eigenschaft wie bei WMI zugreift.

Hallo Th69, ja leider, auch das hab ich schon probiert... ohne Erfolg. 
Dachte eigentlich, dass das Betriebssystem (Windows) erkennen sollte ob On oder Off des Druckers!
Aber Danke erstmal für deine Antwort.
LG

Siehst ja am Druckverhalten von Windows, dass Windows das nicht kann.
Gibt ja genug Szenarien, in denen Druckaufträge einfach in der Warteschlange sind - und der Drucker nicht reagiert weil er offline ist.

Gerade mal bei mir getestet: WorkOffline ändert sich erst, wenn ich einen Druckauftrag an den Drucker verschicke.
Danach wird er erst als Online bzw. wieder Offline erkannt.

Edit, Googlesuche  dazu:

There is one fundamental premise that must be true to determine the state of a physical printer: the Spooler must be attempting to send a print job to the physical printer. This is the only time the state of the printer is reported by the port monitor.

https://learn.microsoft.com/en-us/previous-versions/troubleshoot/windows/win32/printer-print-job-status#determine-the-state-of-a-physical-printer

Hallo Abt, ok... na dann muss ich mich wohl damit vorerst mal abfinden. 
Aber vielen Dank für's testen und deine Antworten!
LG