使用下面显示的Wscript.Network对象,有一种简单的方法来检索计算机上的默认打印机吗?我知道如何设置默认打印机,但我希望获得当前的默认打印机名称。我有Windows 2000,XP和7客户端的混合物,因此不想使用WMI。
Set objNetwork = CreateObject("WScript.Network")
Set objLocalPrinters = objNetwork.EnumPrinterConnections
答案 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