使用如下所示的 Wscript.Network 对象,是否有一种简单的方法来检索计算机上的默认打印机?我知道如何设置默认打印机,但我希望获取当前的默认打印机名称。我混合使用 Windows 2000、XP 和 7 客户端,因此不想使用 WMI。
Set objNetwork = CreateObject("WScript.Network")
Set objLocalPrinters = objNetwork.EnumPrinterConnections
最佳答案
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 版本上不可用。例如,Win32_Printer.Default
指示打印机是否为默认打印机的属性在 Windows 2000/NT 上不存在。不过,有一个简单的解决方法可以在这些 Windows 版本上查找默认打印机,其中包括检查每个打印机的 Attribute
位掩码中的 PRINTER_ATTRIBUTE_DEFAULT
属性:
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?
关于vbscript - VBS - 获取默认打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273458/