Ik wil graag kunnen detecteren of een geïnstalleerde printer verbonden is. Na wat Googlen kwam ik uit op WMI. Een makkelijkere manier heb ik niet kunnen vinden. Er is wel 1 probleem en dat is dat ik er niks aan lijk te hebben.
Ik heb het volgende geprobeerd:
Printer struct
Collect printer data
Ik heb dus een struct aangemaakt om wat data te collecten van de installed printers puur om te zien welke property ik nodig zou hebben. Nou blijken al deze opgehaalde properties nutteloos voor wat ik probeer (connectie controleren).
Aan het eind van de foreach bevat data 6 instanties van MyPrinter (ik heb 6 'printers' geinstalleerd staan) waarvan elk hetzelfde is. Het enige verschil is de name.
Dit zijn de resultaten die ik krijg:
Verklaring comments
Dit krijg ik dus als resultaat voor elke printer.
Nou zijn 2 van deze printers netwerkprinters. Ik trek dus mijn netwerkkabel eruit. Ik heb dus geen connectie meer met de printers. Vervolgens draai ik dit weer en krijg ik precies dezeflde resultaten.
Ofwel, ik heb blijkbaar niks aan deze properties. Ik ben dus geen stap opgeschoten.
Mijn vraag luidt: Hoe kom ik er in hemelsnaam achter of een printer 'beschikbaar' (en verbonden) is of niet, onafhankelijk van of het een lokale printer of een netwerkprinter is?
Edit:
Omdat ik nog geen antwoord heb gehad, heb ik de vraag ook maar even op SO gezet.
Ik heb het volgende geprobeerd:
Printer struct
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public struct MyPrinter { public string Availability; public string ExtendedPrinterStatus; public string Name; public string PrinterStatus; public string Status; public string StatusInfo; public MyPrinter(string a, string eps, string n, string ps, string s, string si) { Availability = a; ExtendedPrinterStatus = eps; Name = n; PrinterStatus = ps; Status = s; StatusInfo = si; } } |
Collect printer data
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"); var data = new List<MyPrinter>(); foreach (var printer in searcher.Get()) { var availability = (printer["Availability"] ?? "").ToString(); var extendedPrinterStatus = (printer["ExtendedPrinterStatus"] ?? "").ToString(); var name = (printer["Name"] ?? "").ToString(); var printerStatus = (printer["PrinterStatus"] ?? "").ToString(); var status = (printer["Status"] ?? "").ToString(); var statusInfo = (printer["StatusInfo"] ?? "").ToString(); data.Add(new MyPrinter(availability, extendedPrinterStatus, name, printerStatus, status, statusInfo)); } |
Ik heb dus een struct aangemaakt om wat data te collecten van de installed printers puur om te zien welke property ik nodig zou hebben. Nou blijken al deze opgehaalde properties nutteloos voor wat ik probeer (connectie controleren).
Aan het eind van de foreach bevat data 6 instanties van MyPrinter (ik heb 6 'printers' geinstalleerd staan) waarvan elk hetzelfde is. Het enige verschil is de name.
Dit zijn de resultaten die ik krijg:
code:
1
2
3
4
5
6
| Availability = "" // printer["Availability"] = null ExtendedPrinterStatus = "2" // 2 = Unknown Name = "Naam van printer" PrinterStatus = "3" // 3 = Idle Status = "Unknown" StatusInfo = "" // Null |
Verklaring comments
Dit krijg ik dus als resultaat voor elke printer.
Nou zijn 2 van deze printers netwerkprinters. Ik trek dus mijn netwerkkabel eruit. Ik heb dus geen connectie meer met de printers. Vervolgens draai ik dit weer en krijg ik precies dezeflde resultaten.
Ofwel, ik heb blijkbaar niks aan deze properties. Ik ben dus geen stap opgeschoten.
Mijn vraag luidt: Hoe kom ik er in hemelsnaam achter of een printer 'beschikbaar' (en verbonden) is of niet, onafhankelijk van of het een lokale printer of een netwerkprinter is?
Edit:
Omdat ik nog geen antwoord heb gehad, heb ik de vraag ook maar even op SO gezet.
[ Voor 3% gewijzigd door Soundless op 08-11-2012 10:01 ]