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將是最好的選擇。 – Bob77 2011-04-02 19:46:05
你的代碼輸出紙張大小爲1的系列,你能幫我看看實際的尺寸,例如紙張尺寸1是用於'8-1/2 x 11',我需要得到這個代替我已經檢查過的1s系列 – Smith 2011-04-03 17:57:40