使用下面显示的Wscript.Network对象,有一种简单的方法来检索计算机上的默认打印机吗?我知道如何设置默认打印机,但我希望获得当前的默认打印机名称.我有Windows 2000,XP和7客户端的混合物,因此不想使用WMI.
Set objNetwork = CreateObject("WScript.Network")
Set objLocalPrinters = objNetwork.EnumPrinterConnections
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
至于 WMI,确实有些 WMI 类和类成员在较旧的 Windows 版本上不可用。例如,Win32_Printer.Default指示打印机是否为默认打印机的属性在 Windows 2000/NT 上不存在。不过,在这些 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
Run Code Online (Sandbox Code Playgroud)
此代码也适用于更高版本的 Windows。
有关详细信息,请查看您好,脚本专家!文章:有没有办法确定计算机上的默认打印机?