Объект принтеров в VB 6 не возвращает принтер со специальным символом в имени - PullRequest
0 голосов
/ 09 января 2019

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
...