WMI查询以选择所有打印机纸张尺寸vb6

WMI查询以选择所有打印机纸张尺寸vb6,vb6,printing,wmi,Vb6,Printing,Wmi,请我需要帮助选择所有打印机纸张尺寸,其名称包含在vb6中。我已经可以使用此代码选择所有打印机,并将其放入列表框中 Set WMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2") Set Items = WMIService.ExecQuery("Select * from Win32_Printer", , 48) 我需要的是一个代码,用于选择我选择的打印机的所有纸张大小/名称,并将其放入另一个列表框中。

请我需要帮助选择所有打印机纸张尺寸,其名称包含在vb6中。我已经可以使用此代码选择所有打印机,并将其放入列表框中

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

我需要的是一个代码,用于选择我选择的打印机的所有纸张大小/名称,并将其放入另一个列表框中。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

您还可以使用类似的调用检索“图纸尺寸代码”或以毫米为单位的尺寸。请参阅。

史密斯,您只需要访问wmi类的
PaperSizesSupported
和/或
PaperTypesAvailable
属性,这两个属性都是数组

我已经查过了,似乎想不出办法。如果您能帮助我,我将不胜感激如果您想从管理脚本中执行这类操作,WMI将是一种方式。您的代码输出纸张大小的1系列,您能帮助我获得实际大小吗?例如纸张大小1用于
8-1/2 x 11
,我需要得到它而不是1系列