2010-02-16 196 views
5

使用下面顯示的Wscript.Network對象,是否有一種簡單的方法來檢索計算機上的默認打印機?我知道如何設置默認打印機,但我正在尋找當前的默認打印機名稱。我有Windows 2000,XP和7客戶端的混合體,並且因此不想使用WMI。VBS - 獲取默認打印機

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

請問爲什麼你不想使用WMI? – Helen 2010-02-16 16:51:25

+0

有人告訴我,腳本中的某些功能可能與Windows 2000機器不兼容。 – Mark 2010-02-16 18:59:47

回答

3

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?

+0

我看到一篇與此類似的文章,但它似乎與Windows 7無關。 – Mark 2010-02-16 16:20:58

+0

這兩種腳本都適用於Windows 7 Pro(32位)。 – bart 2014-11-17 08:24:40

+0

對於WMI示例,如果默認打印機是本地的,那麼您可能需要使用「Wscript.Echo oPrinter.Name」來獲取名稱,因爲它不一定會被共享。 – sdjuan 2017-02-21 22:04:04

2

從(MSDN):

的EnumPrinterConnections方法返回的集合。該集合是一個數組,用於關聯網絡打印機本地名稱及其關聯的UNC名稱對。集合中偶數編號的項目表示打印機端口。奇數編號表示聯網的打印機UNC名稱。集合中的第一項是索引零(0)。

因此很少有機會從此集合中獲取默認打印機。對不起

格爾茨, GHAD

相關問題