VBS - 获取默认打印机

时间:2010-02-16 14:13:26

标签: vbscript printing

使用下面显示的Wscript.Network对象,有一种简单的方法来检索计算机上的默认打印机吗?我知道如何设置默认打印机,但我希望获得当前的默认打印机名称。我有Windows 2000,XP和7客户端的混合物,因此不想使用WMI。

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

3 个答案:

答案 0 :(得分:4)

WshNetwork.EnumPrinterConnections集合未提供有关默认打印机的任何信息。您可以尝试从注册表中检索默认的打印机名称,但我不确定它是否可靠:

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


至于WMI,确实有一些WMI类和类成员在较旧的Windows版本上不可用。例如,在Windows 2000 / NT上不存在指示打印机是否为默认打印机的Win32_Printer.Default属性。不过,在这些Windows版本上找到默认打印机有一个简单的解决方法,其中包括检查每个打印机的PRINTER_ATTRIBUTE_DEFAULT位掩码中的Attribute属性:

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

此代码也适用于以后的Windows版本。

有关详细信息,请查看此嗨,脚本专家!文章:Is There Any Way to Determine the Default Printer On a Computer?

答案 1 :(得分:2)

从(MSDN):

EnumPrinterConnections方法返回一个集合。此集合是一个关联项目对的数组 - 网络打印机本地名称及其关联的UNC名称。集合中的偶数项代表打印机端口。奇数编号项表示联网打印机UNC名称。集合中的第一项是索引零(0)。

因此很少有机会从此系列中获取默认打印机。遗憾

格尔茨, GHAD

答案 2 :(得分:0)

对于 MS ACCESS oPrinter.ShareName 为 null 但 oPrinter.Caption 运行良好!

Dim strComputer As String
Dim oWMI As Object
Dim colPrinters
Dim oPrinter
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
        Debug.Print oPrinter.Caption
    End If
Next