VBS - Получить принтер по умолчанию - PullRequest
6 голосов
/ 16 февраля 2010

Используя объект Wscript.Network, показанный ниже, есть ли простой способ получить принтер по умолчанию на машине? Я знаю, как установить принтер по умолчанию, но я ищу текущее имя принтера по умолчанию. У меня есть смесь клиентов Windows 2000, XP и 7, и я не хочу использовать WMI по этой причине.

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

Ответы [ 2 ]

4 голосов
/ 16 февраля 2010

Коллекция 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.

Подробнее см. В этом Эй, сценарист! Статья: Есть ли способ определить принтер по умолчанию на компьютере?

2 голосов
/ 16 февраля 2010

С ( MSDN ):

Метод EnumPrinterConnections возвращает коллекцию. Эта коллекция представляет собой массив, который связывает пары элементов - локальные имена сетевого принтера и связанные с ними имена UNC. Элементы с четными номерами в коллекции представляют порты принтера. Нечетные элементы представляют UNC-имена сетевых принтеров. Первый элемент в коллекции с нулевым индексом (0).

Так что у этой коллекции мало шансов получить принтер по умолчанию. К сожалению

Greetz, GHAD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...