系統打印機設置01>設置默認打印机 描述:在計算机上設置默認打印机。需要Windows XP或Windows Server 2003。 代碼: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer Where Name='ScriptedPrinter'") For Each objPrinter in colInstalledPrinters objPrinter.SetDefaultPrinter Next02>根据隊列長度設置默認打印机 描述:檢驗計算机上的所有打印隊列,并且將默認打印机設置為包含最少文檔的隊列。 代碼: intSmallestQueue = 1000 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colPrintQueues = objWMIService.ExecQuery_("Select * from Win32_PerfFormattedData_Spooler_PrintQueue" _ & "Where Name <> '_Total'") For Each objPrintQueue In colPrintQueues intCurrentQueue = objPrintQueue.Jobs + objPrintQueue.JobsSpooling If intCurrentQueue <= intSmallestQueue Then strNewDefault = objPrintQueue.Name intSmallestQueue = intCurrentQueue End If Next Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer Where Name = '" & strNewDefault & "'") For Each objPrinter In colInstalledPrinters Call objPrinter.SetDefaultPrinter Next03>將打印作業發送到不同的打印隊列 描述:更改邏輯打印机的 TCP/IP 打印机端口,其結果是將現有的打印作業轉換到新的打印机端口 (因而轉換到不同的打印机)。需要Windows XP或Windows Server 2003。 代碼: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objPrinter = objWMIService.Get _ ("Win32_Printer.DeviceID='ArtDepartmentPrinter'") objPrinter.PortName = "IP_192.168.1.10" objPrinter.Put_04>當打印机停止時獲得通知 描述:檢查計算机上每台打印机的狀態,如果這些打印机中有任何一台已經停止,就發出警報。 代碼: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer Where PrinterStatus = '1' " _ & "or PrinterStatus = '2'") If colInstalledPrinters.Count = 0 Then Wscript.Echo "All printers are functioning correctly." Else For Each objprinter In colInstalledPrinters Wscript.Echo "Printer " & objprinter.Name & " is not responding." Next End If05>清除打印隊列 描述:刪除名為HP QuietJet的打印机上的所有打印作業。 代碼: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Name='HPQuietJet'") For Each objPrinter In colInstalledPrinters objPrinter.CancelAllJobs Next06>監視打印服務 描述:返回Spooler服務的狀態(正在運行、已停止、已暫停等等)。 代碼: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colRunningServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where Name = 'Spooler'") For Each objService in colRunningServices Wscript.Echo objService.DisplayName & VbTab & objService.State Next
Private Const CCHDEVICENAME = 32 Private Const CCHFORMNAME = 32 Private Type DEVMODE dmDeviceName As String * CCHDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCHFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Private Type PRINTER_INFO_2 pServerName As String pPrinterName As String pShareName As String pPortName As String pDriverName As String pComment As String pLocation As String pDevMode As Long pSepFile As String pPrintProcessor As String pDatatype As String pParameters As String pSecurityDescriptor As Long Attributes As Long Priority As Long DefaultPriority As Long StartTime As Long UntilTime As Long Status As Long JobsCount As Long AveragePPM As Long End Type Private Type PRINTER_DEFAULTS pDatatype As String pDevMode As DEVMODE DesiredAccess As Long End Type Public Enum Printer_Status PRINTER_STATUS_READY = &H0 PRINTER_STATUS_PAUSED = &H1 PRINTER_STATUS_ERROR = &H2 PRINTER_STATUS_PENDING_DELETION = &H4 PRINTER_STATUS_PAPER_JAM = &H8 PRINTER_STATUS_PAPER_OUT = &H10 PRINTER_STATUS_MANUAL_FEED = &H20 PRINTER_STATUS_PAPER_PROBLEM = &H40 PRINTER_STATUS_OFFLINE = &H80 PRINTER_STATUS_IO_ACTIVE = &H100 PRINTER_STATUS_BUSY = &H200 PRINTER_STATUS_PRINTING = &H400 PRINTER_STATUS_OUTPUT_BIN_FULL = &H800 PRINTER_STATUS_NOT_AVAILABLE = &H1000 PRINTER_STATUS_WAITING = &H2000 PRINTER_STATUS_PROCESSING = &H4000 PRINTER_STATUS_INITIALIZING = &H8000 PRINTER_STATUS_WARMING_UP = &H10000 PRINTER_STATUS_TONER_LOW = &H20000 PRINTER_STATUS_NO_TONER = &H40000 PRINTER_STATUS_PAGE_PUNT = &H80000 PRINTER_STATUS_USER_INTERVENTION = &H100000 PRINTER_STATUS_OUT_OF_MEMORY = &H200000 PRINTER_STATUS_DOOR_OPEN = &H400000 PRINTER_STATUS_SERVER_UNKNOWN = &H800000 PRINTER_STATUS_POWER_SAVE = &H1000000 End Enum Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, buffer As Long, ByVal pbSize As Long, pbSizeNeeded As Long) As Long Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function IsBadStringPtrByLong Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long Public Function StringFromPointer(lpString As Long, lMaxLength As Long) As String Dim sRet As String Dim lret As Long If lpString = 0 Then StringFromPointer = "" Exit Function End If If IsBadStringPtrByLong(lpString, lMaxLength) Then ' An error has occured - do not attempt to use this pointer StringFromPointer = "" Exit Function End If ' Pre-initialise the return string... sRet = Space$(lMaxLength) CopyMemory ByVal sRet, ByVal lpString, ByVal Len(sRet) If Err.LastDllError = 0 Then If InStr(sRet, Chr$(0)) > 0 Then sRet = Left$(sRet, InStr(sRet, Chr$(0)) - 1) End If End If StringFromPointer = sRet End Function Private Sub Form_Load() Dim SizeNeeded As Long, buffer() As Long Dim pDef As PRINTER_DEFAULTS 'Get a handle to the printer lret = OpenPrinter(Printer.DeviceName, mhPrinter, pDef) 'Initialize the buffer ReDim Preserve buffer(0 To 0) As Long 'Retrieve the required size (in bytes) lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer), SizeNeeded) 'Resize the buffer... Note that a Long is four bytes ReDim Preserve buffer(0 To (SizeNeeded / 4) + 3) As Long 'Retrieve the Printer information lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer) * 4, SizeNeeded) 'The data stored in 'buffer' corresponds with the data of a PRINTER_INFO_2 structure ClosePrinter mhPrinter 'Show the data PrintData "Server name", StringFromPointer(buffer(0), 255) PrintData "Printer name", StringFromPointer(buffer(1), 255) PrintData "Share name", StringFromPointer(buffer(2), 255) PrintData "Port name", StringFromPointer(buffer(3), 255) PrintData "Driver name", StringFromPointer(buffer(4), 255) PrintData "Comment", StringFromPointer(buffer(5), 255) PrintData "Location", StringFromPointer(buffer(6), 255) Unload Me End Sub Sub PrintData(Name As String, Data As String) If LenB(Data) > 0 Then Debug.Print Name + ": " + Data End If End Sub
据说可以,还没试呢。
描述:在計算机上設置默認打印机。需要Windows XP或Windows Server 2003。
代碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name='ScriptedPrinter'")
For Each objPrinter in colInstalledPrinters
objPrinter.SetDefaultPrinter
Next02>根据隊列長度設置默認打印机
描述:檢驗計算机上的所有打印隊列,并且將默認打印机設置為包含最少文檔的隊列。
代碼:
intSmallestQueue = 1000
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrintQueues = objWMIService.ExecQuery_("Select * from Win32_PerfFormattedData_Spooler_PrintQueue" _
& "Where Name <> '_Total'")
For Each objPrintQueue In colPrintQueues
intCurrentQueue = objPrintQueue.Jobs + objPrintQueue.JobsSpooling
If intCurrentQueue <= intSmallestQueue Then
strNewDefault = objPrintQueue.Name
intSmallestQueue = intCurrentQueue
End If
Next
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = '" & strNewDefault & "'")
For Each objPrinter In colInstalledPrinters
Call objPrinter.SetDefaultPrinter
Next03>將打印作業發送到不同的打印隊列
描述:更改邏輯打印机的 TCP/IP 打印机端口,其結果是將現有的打印作業轉換到新的打印机端口
(因而轉換到不同的打印机)。需要Windows XP或Windows Server 2003。
代碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objPrinter = objWMIService.Get _
("Win32_Printer.DeviceID='ArtDepartmentPrinter'")
objPrinter.PortName = "IP_192.168.1.10"
objPrinter.Put_04>當打印机停止時獲得通知
描述:檢查計算机上每台打印机的狀態,如果這些打印机中有任何一台已經停止,就發出警報。
代碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where PrinterStatus = '1' " _
& "or PrinterStatus = '2'")
If colInstalledPrinters.Count = 0 Then
Wscript.Echo "All printers are functioning correctly."
Else
For Each objprinter In colInstalledPrinters
Wscript.Echo "Printer " & objprinter.Name & " is not responding."
Next
End If05>清除打印隊列
描述:刪除名為HP QuietJet的打印机上的所有打印作業。
代碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer Where Name='HPQuietJet'")
For Each objPrinter In colInstalledPrinters
objPrinter.CancelAllJobs
Next06>監視打印服務
描述:返回Spooler服務的狀態(正在運行、已停止、已暫停等等)。
代碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'Spooler'")
For Each objService in colRunningServices
Wscript.Echo objService.DisplayName & VbTab & objService.State
Next
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Type PRINTER_INFO_2
pServerName As String
pPrinterName As String
pShareName As String
pPortName As String
pDriverName As String
pComment As String
pLocation As String
pDevMode As Long
pSepFile As String
pPrintProcessor As String
pDatatype As String
pParameters As String
pSecurityDescriptor As Long
Attributes As Long
Priority As Long
DefaultPriority As Long
StartTime As Long
UntilTime As Long
Status As Long
JobsCount As Long
AveragePPM As Long
End Type
Private Type PRINTER_DEFAULTS
pDatatype As String
pDevMode As DEVMODE
DesiredAccess As Long
End Type
Public Enum Printer_Status
PRINTER_STATUS_READY = &H0
PRINTER_STATUS_PAUSED = &H1
PRINTER_STATUS_ERROR = &H2
PRINTER_STATUS_PENDING_DELETION = &H4
PRINTER_STATUS_PAPER_JAM = &H8
PRINTER_STATUS_PAPER_OUT = &H10
PRINTER_STATUS_MANUAL_FEED = &H20
PRINTER_STATUS_PAPER_PROBLEM = &H40
PRINTER_STATUS_OFFLINE = &H80
PRINTER_STATUS_IO_ACTIVE = &H100
PRINTER_STATUS_BUSY = &H200
PRINTER_STATUS_PRINTING = &H400
PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
PRINTER_STATUS_NOT_AVAILABLE = &H1000
PRINTER_STATUS_WAITING = &H2000
PRINTER_STATUS_PROCESSING = &H4000
PRINTER_STATUS_INITIALIZING = &H8000
PRINTER_STATUS_WARMING_UP = &H10000
PRINTER_STATUS_TONER_LOW = &H20000
PRINTER_STATUS_NO_TONER = &H40000
PRINTER_STATUS_PAGE_PUNT = &H80000
PRINTER_STATUS_USER_INTERVENTION = &H100000
PRINTER_STATUS_OUT_OF_MEMORY = &H200000
PRINTER_STATUS_DOOR_OPEN = &H400000
PRINTER_STATUS_SERVER_UNKNOWN = &H800000
PRINTER_STATUS_POWER_SAVE = &H1000000
End Enum
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, buffer As Long, ByVal pbSize As Long, pbSizeNeeded As Long) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function IsBadStringPtrByLong Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long
Public Function StringFromPointer(lpString As Long, lMaxLength As Long) As String
Dim sRet As String
Dim lret As Long
If lpString = 0 Then
StringFromPointer = ""
Exit Function
End If
If IsBadStringPtrByLong(lpString, lMaxLength) Then
' An error has occured - do not attempt to use this pointer
StringFromPointer = ""
Exit Function
End If
' Pre-initialise the return string...
sRet = Space$(lMaxLength)
CopyMemory ByVal sRet, ByVal lpString, ByVal Len(sRet)
If Err.LastDllError = 0 Then
If InStr(sRet, Chr$(0)) > 0 Then
sRet = Left$(sRet, InStr(sRet, Chr$(0)) - 1)
End If
End If
StringFromPointer = sRet
End Function
Private Sub Form_Load()
Dim SizeNeeded As Long, buffer() As Long
Dim pDef As PRINTER_DEFAULTS
'Get a handle to the printer
lret = OpenPrinter(Printer.DeviceName, mhPrinter, pDef)
'Initialize the buffer
ReDim Preserve buffer(0 To 0) As Long
'Retrieve the required size (in bytes)
lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer), SizeNeeded)
'Resize the buffer... Note that a Long is four bytes
ReDim Preserve buffer(0 To (SizeNeeded / 4) + 3) As Long
'Retrieve the Printer information
lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer) * 4, SizeNeeded)
'The data stored in 'buffer' corresponds with the data of a PRINTER_INFO_2 structure
ClosePrinter mhPrinter
'Show the data
PrintData "Server name", StringFromPointer(buffer(0), 255)
PrintData "Printer name", StringFromPointer(buffer(1), 255)
PrintData "Share name", StringFromPointer(buffer(2), 255)
PrintData "Port name", StringFromPointer(buffer(3), 255)
PrintData "Driver name", StringFromPointer(buffer(4), 255)
PrintData "Comment", StringFromPointer(buffer(5), 255)
PrintData "Location", StringFromPointer(buffer(6), 255)
Unload Me
End Sub
Sub PrintData(Name As String, Data As String)
If LenB(Data) > 0 Then
Debug.Print Name + ": " + Data
End If
End Sub