WMI-запрос для выбора всех размеров бумаги для принтера vb6 - PullRequest
1 голос
/ 02 апреля 2011

пожалуйста, мне нужна помощь в выборе всех размеров бумаги для принтера, название которой указано в vb6. я уже могу выбрать все принтеры, используя этот код, и поместить его в список.

Set WMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2")
Set Items = WMIService.ExecQuery("Select * from Win32_Printer", , 48)

мне нужен код, чтобы выбрать все размеры бумаги / названия принтера, который я выбрал, и поместить его в другой список

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Смит, вам нужен только доступ к PaperSizesSupported и / или PaperTypesAvailable свойствам класса Win32_Printer wmi, оба свойства являются массивами.

1 голос
/ 02 апреля 2011

WMI - это сервис сценариев администратора, который не должен зависеть от присутствия и работы приложений. Впрочем, есть и хорошие способы получить информацию напрямую.

Это образец формы с двумя списками:

Option Explicit

Private Const DC_PAPERNAMES = 16

Private Declare Function DeviceCapabilities Lib "winspool.drv" _
    Alias "DeviceCapabilitiesW" ( _
    ByVal lpDeviceName As Long, _
    ByVal lpPort As Long, _
    ByVal iIndex As Long, _
    ByVal lpOutput As Long, _
    ByVal lpDevMode As Long) As Long

Private Sub Form_Load()
    Dim P As Printer

    For Each P In Printers
        lstPrinters.AddItem P.DeviceName
    Next
End Sub

Private Sub lstPrinters_Click()
    Dim P As Printer
    Dim lngPapers As Long
    Dim strPaperNames As String
    Dim lngPaper As Long
    Dim strPaperName As String
    Dim lngActualLength As Long

    Set P = Printers(lstPrinters.ListIndex)
    lngPapers = DeviceCapabilities(StrPtr(P.DeviceName), _
                                   StrPtr(P.Port), _
                                   DC_PAPERNAMES, _
                                   0, _
                                   0)
    strPaperNames = String$(lngPapers * 64, 0)
    lngPapers = DeviceCapabilities(StrPtr(P.DeviceName), _
                                   StrPtr(P.Port), _
                                   DC_PAPERNAMES, _
                                   StrPtr(strPaperNames), _
                                   0)
    lstPapers.Clear
    For lngPaper = 0 To lngPapers - 1
        strPaperName = Mid$(strPaperNames, 64 * lngPaper + 1, 64)
        lngActualLength = InStr(strPaperName, vbNullChar) - 1
        If lngActualLength > 1 Then strPaperName = Left$(strPaperName, lngActualLength)
        lstPapers.AddItem strPaperName
    Next
End Sub

Вы также можете получить "коды размера бумаги" или размеры в миллиметрах, используя аналогичный вызов. См. Функция DeviceCapabilities .

...