VB6 (не VB.Net или VBScript)
Я использую объект Printer
и недавно обнаружил, что некоторые принтеры
не возвращаются, если имя содержит определенные символы.
В VB6 это будет что-то вроде:
Dim pr As Printer
For Each pr In Printers
MsgBox pr.DeviceName
Next pr
Я могу легко переименовать любой принтер в Windows (любая версия ОС) и
заставить его потерпеть неудачу.
Я подозреваю, что это связано с проблемой UTF-8 / Unicode, но я не знаю, как ее решить.
Например, это имя принтера работает нормально: "MyPrinter 1"
, но это не так: "MyPrinter 1 ę"
.
Как я могу получить Printer
, если имя имеет нестандартный (для американского английского в любом случае) символ?
EDIT:
Я нашел этот код для доступа к принтерам, и он вернет их правильно, даже со специальными символами.
Однако я не знаю, как это сделать:
1) Использовать объект для печати (как я бы делал с объектом Printers)
2) Или установите объект Printer для возвращаемого объекта из WMI
(К вашему сведению - элемент управления InkEdit будет правильно отображать специальные символы без каких-либо споров по Юникоду - я использую только для целей отображения.)
Dim strComputer As String
Dim objWMIService As Object
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
Dim myPrinter As Printer
Dim junk As String
For Each objprinter In colInstalledPrinters
List1.AddItem objprinter.Name & " --- " & objprinter.ShareName & " --- " & objprinter.ServerName
InkEdit1.Text = InkEdit1.Text & objprinter.Name & " --- " & objprinter.ShareName & " --- " & objprinter.ServerName & vbNewLine
If InStr(1, objprinter.Name, "HP") > -1 Then
myPrinter = objprinter.
End If
Next