使用下面顯示的Wscript.Network對象,是否有一種簡單的方法來檢索計算機上的默認打印機?我知道如何設置默認打印機,但我正在尋找當前的默認打印機名稱。我有Windows 2000,XP和7客戶端的混合體,並且因此不想使用WMI。VBS - 獲取默認打印機
Set objNetwork = CreateObject("WScript.Network")
Set objLocalPrinters = objNetwork.EnumPrinterConnections
使用下面顯示的Wscript.Network對象,是否有一種簡單的方法來檢索計算機上的默認打印機?我知道如何設置默認打印機,但我正在尋找當前的默認打印機名稱。我有Windows 2000,XP和7客戶端的混合體,並且因此不想使用WMI。VBS - 獲取默認打印機
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?
從(MSDN):
的EnumPrinterConnections方法返回的集合。該集合是一個數組,用於關聯網絡打印機本地名稱及其關聯的UNC名稱對。集合中偶數編號的項目表示打印機端口。奇數編號表示聯網的打印機UNC名稱。集合中的第一項是索引零(0)。
因此很少有機會從此集合中獲取默認打印機。對不起
格爾茨, GHAD
請問爲什麼你不想使用WMI? – Helen 2010-02-16 16:51:25
有人告訴我,腳本中的某些功能可能與Windows 2000機器不兼容。 – Mark 2010-02-16 18:59:47