2010-02-16 64 views
5

Usando el objeto Wscript.Network que se muestra a continuación, ¿hay alguna manera fácil de recuperar la impresora predeterminada en una máquina? Sé cómo configurar la impresora predeterminada, pero estoy buscando obtener el nombre de impresora predeterminado actual. Tengo una mezcla de Windows 2000, XP y 7 clientes y no quiero usar WMI por ese motivo.VBS - Obtener impresora predeterminada

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

¿Puedo preguntar por qué no desea utilizar WMI? – Helen

+0

Me dijeron que algunas de las funciones dentro del script pueden no ser compatibles con las máquinas con Windows 2000. – Mark

Respuesta

3

colección La WshNetwork.EnumPrinterConnections no proporciona ninguna información sobre la impresora por defecto. Usted puede tratar de recuperar el nombre de la impresora por defecto del registro en su lugar, aunque no estoy seguro si es fiable:

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 


En cuanto a WMI, es cierto que algunas clases WMI y los miembros de la clase no están disponibles en versiones anteriores de Windows. Por ejemplo, la propiedad Win32_Printer.Default que indica si la impresora es la predeterminada, no existe en Windows 2000/NT. Sin embargo, hay una solución sencilla para encontrar la impresora predeterminada en las versiones de Windows, que consiste en la comprobación para el atributo PRINTER_ATTRIBUTE_DEFAULT en Attribute máscara de bits de cada impresora:

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 

Este código funciona en las versiones posteriores de Windows también.

Para obtener más información, consulte este ¡Hola, tipo de scripting! artículo: Is There Any Way to Determine the Default Printer On a Computer?

+0

Vi una publicación similar también, pero no parece ser relevante para Windows 7. – Mark

+0

Ambas secuencias de comandos funcionan para mí en Windows 7 Pro (32 bits). – bart

+0

Para el ejemplo de WMI, si la impresora predeterminada es local, es posible que deba utilizar "Wscript.Echo oPrinter.Name" para obtener el nombre, ya que no necesariamente se compartirá. – sdjuan

2

De (MSDN):

El método EnumPrinterConnections devuelve una colección. Esta colección es una matriz que asocia pares de elementos: nombres locales de impresoras de red y sus nombres asociados de UNC. Los elementos con números pares en la colección representan puertos de impresora. Los elementos impares representan los nombres UNC de la impresora en red. El primer elemento en la colección está en el índice cero (0).

Por lo tanto, hay pocas posibilidades de obtener la impresora predeterminada de esta colección. Lo sentimos

Greetz, ghad

Cuestiones relacionadas