vbscript - VBS - 获取默认打印机

标签 vbscript printing

使用如下所示的 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/

相关文章:

vbscript - 递归访问文件夹内的子文件夹文件

validation - 16 位 BMP 验证

vbscript - 将vbs加密脚本转换为字符串

vbscript - 如何在 vbScript 中解析 ISO 8601 时间戳

vbscript - 定时任务打开URL

python - 打印变量名称和内容作为调试工具;寻找 emacs/Python 快捷方式

java - 获取数组中项目的索引

c# - 如何知道使用复制命令到本地打印机的打印过程何时成功完成?

Linux 打印状态检查脚本

java - 在 Java 中强制目标打印机