Laden...

Prüfen ob Netzwerkdrucker erreichbar

Letzter Beitrag vor 11 Jahren 4 Posts 2.760 Views
Prüfen ob Netzwerkdrucker erreichbar

Ein herzliches Hallo an alle,

aktuell befasse ich mich mit der Frage, wie ich am einfachsten erfahren kann, ob ein Netzwerkdrucker erreichbar ist oder nicht? Ganz ohne Dialoge etc. also einfach anhand der Adresse im Netzwerk: \RechnerA\DruckerA

Das ganze soll in einer Assembly verpackt werden und dann auf einem MSSQL Server 2005 eingebunden werden.

Eine Lösung hatte ich schon:


                        PrintDocument printDocument = new PrintDocument();
                        printDocument.PrinterSettings.PrinterName = pathToFile;
                        isOnline = printDocument.PrinterSettings.IsValid;

Jedoch meckert hier der SQL-Server, da diese Lösung auf .NET 1.1 basiert und der möchte doch gerne was von .NET 2.0 😕

Gibt es hierfür eine einfache Lösung?

Viele Grüße

Also ich bin inzwischen selbst auf folgende Methode gestoßen:

Man bindet den winspool Treiber ein


        [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

Die Abfrage ob ein Drucker Online ist oder nicht sieht dann folgendermaßen aus:


        public bool PrinterIsOnline(string PrinterName)
        { 
          bool isOnline = false;
          IntPtr hPrinter = new IntPtr(0);
          
          if(OpenPrinter(PrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            isOnline = true;
            
           return isOnline;
        
        }

Nach ein paar Versuchen kann ich sagen, dass es wirklich funktioniert. Falls jemand noch Anmerkungen, Kritik hat etc. bitte raus damit! Es funktioniert zwar, doch das dies der gängige Weg ist, wage ich zu bezweifeln.

Viele Grüße

Wäre anpingen nicht noch ne Möglichkeit?

Achtung: zu OpenPrinter

Die OpenPrinter Methode prüft nur lokale drucker, also keine verfügbarkeit von Netzwerkdruckern, die noch nicht verbunden sind.