Коллекция 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, который заключается в проверке атрибута 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
Этот код работает и в более поздних версиях Windows.
Подробнее см. В этом Эй, сценарист! Статья: Есть ли способ определить принтер по умолчанию на компьютере?