2010-02-16 8 views
5

Mit dem unten gezeigten Wscript.Network-Objekt gibt es eine einfache Möglichkeit, den Standarddrucker auf einem Computer abzurufen. Ich weiß, wie man den Standarddrucker einstellt, aber ich suche, um den gegenwärtigen Standarddruckernamen zu erhalten. Ich habe eine Mischung aus Windows 2000, XP und 7 Clients und möchte daher WMI nicht verwenden.VBS - Standarddrucker

Set objNetwork = CreateObject("WScript.Network") 
Set objLocalPrinters = objNetwork.EnumPrinterConnections 
+0

Darf ich fragen, warum Sie WMI nicht verwenden möchten? – Helen

+0

Mir wurde gesagt, dass einige der Funktionen innerhalb des Skripts möglicherweise nicht kompatibel mit Windows 2000-Computern sind. – Mark

Antwort

3

Die WshNetwork.EnumPrinterConnections Sammlung liefert keine Informationen über den Standarddrucker. Sie können versuchen, die Standarddruckernamen aus der Registrierung abrufen statt, obwohl ich nicht sicher bin, ob es zuverlässig ist:

Set oShell = CreateObject("WScript.Shell") 
strValue = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" 
strPrinter = oShell.RegRead(strValue) 
strPrinter = Split(strPrinter, ",")(0) 
WScript.Echo strPrinter 


Wie für WMI, es ist wahr, dass einige WMI-Klassen und Klassenmitglieder sind nicht verfügbar ältere Windows-Versionen. Die Eigenschaft Win32_Printer.Default, die angibt, ob der Drucker der Standarddrucker ist, ist unter Windows 2000/NT nicht vorhanden. Dennoch gibt es eine einfache Abhilfe die Standarddrucker auf diesen Windows-Versionen für die Suche, die für das PRINTER_ATTRIBUTE_DEFAULT Attribut in jedem Drucker Attribute bitmask bei der Prüfung besteht:

Const ATTR_DEFAULT = 4 
strComputer = "." 

Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colPrinters = oWMI.ExecQuery("SELECT * FROM Win32_Printer") 

For Each oPrinter in colPrinters 
    If oPrinter.Attributes And ATTR_DEFAULT Then 
     Wscript.Echo oPrinter.ShareName 
    End If 
Next 

Dieser Code auf neueren Windows-Versionen als gut funktioniert.

Für Details, überprüfen Sie diese Hey, Scripting Guy! Artikel: Is There Any Way to Determine the Default Printer On a Computer?

+0

Ich sah einen ähnlichen Beitrag, aber es scheint nicht relevant für Windows 7. – Mark

+0

Beide Skripte funktionieren für mich auf Windows 7 Pro (32 Bit). – bart

+0

Wenn für den WMI-Beispiel der Standarddrucker lokal ist, müssen Sie möglicherweise "Wscript.Echo oPrinter.Name" verwenden, um den Namen abzurufen, da dieser nicht unbedingt freigegeben wird. – sdjuan

2

Von (MSDN):

Die EnumPrinterConnections Methode gibt eine Auflistung. Bei dieser Auflistung handelt es sich um ein Array, das Paaren von Elementen zugeordnet ist - lokale Netzwerkdrucker-Namen und die zugehörigen UNC-Namen. Elemente mit gerader Nummer in der Sammlung stellen Druckerports dar. Odd-nummerierte Elemente repräsentieren die UNC-Namen des Netzwerkdruckers. Das erste Objekt in der Sammlung befindet sich im Index Null (0).

So gibt es wenig Chance, den Standarddrucker aus dieser Sammlung zu erhalten. Leider

Greetz, ghad