我需要帮助选择所有打印机纸张尺寸,其名称包含在vb6中。我已经可以使用此代码选择所有打印机,并将其放入列表框中。
Set WMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2")
Set Items = WMIService.ExecQuery("Select * from Win32_Printer", , 48)
我需要的是一个代码来选择我选择的所有纸张尺寸/名称,并将其放入另一个列表框
答案 0 :(得分: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。
答案 1 :(得分:1)
Smith,您只需要访问Win32_Printer
wmi类的PaperSizesSupported
和/或PaperTypesAvailable
属性,这两个属性都是数组。