【问题标题】:WMI query to select all printer paper size vb6WMI 查询以选择所有打印机纸张大小 vb6
【发布时间】:2011-04-02 09:17:26
【问题描述】:

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

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

我需要一个代码来选择我选择的打印机的所有纸张尺寸/名称,并将其放入另一个列表框中

【问题讨论】:

    标签: vb6 printing wmi


    【解决方案1】:

    WMI 是一种管理脚本服务,应用程序不应依赖它的存在和运行。不过,有一些非常好的方法可以直接获取信息。

    这是一个带有两个 ListBox 的示例表单:

    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 Function

    【讨论】:

    • 当然,如果您想要从管理脚本中执行此类操作,WMI 将是可行的方法。
    • 您的代码输出系列 1 用于纸张尺寸,您能帮我获取实际尺寸吗,例如纸张尺寸 1 用于 8-1/2 x 11,我需要得到这个而不是 1 的系列
    【解决方案2】:

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

    【讨论】:

    • 我已经检查过了,但似乎无法找到方法。如果您能帮助我,我将不胜感激
    猜你喜欢
    • 2019-01-19
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2012-08-31
    相关资源
    最近更新 更多