2010-02-16 31 views
5

Utilizzando l'oggetto Wscript.Network mostrato di seguito, esiste un modo semplice per recuperare la stampante predefinita su una macchina? So come impostare la stampante predefinita, ma sto cercando di ottenere il nome della stampante predefinita corrente. Ho una miscela di Windows 2000, XP e 7 client e non voglio usare WMI per questo motivo.VBS - Ottieni stampante predefinita

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

Posso chiedere perché non si desidera utilizzare WMI? – Helen

+0

Mi è stato detto che alcune delle funzioni all'interno dello script potrebbero non essere compatibili con i computer Windows 2000. – Mark

risposta

3

Il WshNetwork.EnumPrinterConnections collezione non fornisce alcuna informazione circa la stampante predefinita. Si può provare a recuperare il nome della stampante predefinita dal Registro di sistema, invece, anche se non sono sicuro se è affidabile:

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 


Quanto a WMI, è vero che alcune classi WMI e membri della classe non sono disponibili su versioni precedenti di Windows. Ad esempio, la proprietà Win32_Printer.Default che indica se la stampante è quella predefinita, non esiste su Windows 2000/NT. Tuttavia, c'è una soluzione semplice per trovare la stampante predefinita su quelle versioni di Windows, che consiste nel controllo per l'attributo PRINTER_ATTRIBUTE_DEFAULT in Attribute maschera di bit di ogni stampante:

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 

Questo codice funziona in un secondo momento le versioni di Windows pure.

Per maggiori dettagli, dai un'occhiata a questo Hey, Scripting Guy! articolo: Is There Any Way to Determine the Default Printer On a Computer?

+0

Ho visto un post simile a questo, ma non sembra essere rilevante per Windows 7. – Mark

+0

Entrambi gli script funzionano per me su Windows 7 Pro (32 bit). – bart

+0

Per il campione WMI, se la stampante predefinita è locale, potrebbe essere necessario utilizzare "Wscript.Echo oPrinter.Name" per ottenere il nome poiché non sarà necessariamente condiviso. – sdjuan

2

Da (MSDN):

Il metodo EnumPrinterConnections restituisce una collezione. Questa raccolta è una matrice che associa coppie di elementi: nomi locali della stampante di rete e nomi UNC associati. Gli elementi pari della collezione rappresentano le porte della stampante. Gli elementi con numero dispari rappresentano i nomi UNC della stampante in rete. Il primo elemento nella raccolta è a zero dell'indice (0).

Quindi ci sono poche possibilità di ottenere la stampante predefinita da questa collezione. Siamo spiacenti

Greetz, Ghad

Problemi correlati