【问题标题】:VBS - Get Default PrinterVBS - 获取默认打印机
【发布时间】:2010-02-16 14:13:25
【问题描述】:

使用如下所示的 Wscript.Network 对象,是否有一种简单的方法可以检索机器上的默认打印机?我知道如何设置默认打印机,但我正在寻找当前的默认打印机名称。我混合了 Windows 2000、XP 和 7 客户端,因此不想使用 WMI。

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

【问题讨论】:

  • 请问您为什么不想使用 WMI?
  • 有人告诉我,脚本中的某些功能可能与 Windows 2000 机器不兼容。

标签: vbscript printing


【解决方案1】:

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?

【讨论】:

  • 我也看到了类似的帖子,不过好像和Windows 7无关。
  • 对于 WMI wxample,如果默认打印机是本地的,那么您可能需要使用“Wscript.Echo oPrinter.Name”来获取名称,因为它不一定是共享的。
【解决方案2】:

发件人(MSDN):

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

所以从这个集合中获得默认打印机的机会很小。对不起

问候, 加德

【讨论】:

    【解决方案3】:

    对于 MS ACCESS oPrinter.ShareName 为空,但 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
    

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多