- 积分
- 5359
- 明经币
- 个
- 注册时间
- 2004-7-13
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
'在模块中加入以下声明及模组:
'Constants Definition Public Const CCHDEVICENAME = 32 Public Const CCHFORMNAME = 32 Public Const PRINTER_ACCESS_ADMINISTER = &H4 Public Const PRINTER_ACCESS_USE = &H8
'Types Definition Public 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 Long dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type
Public Type PRINTER_DEFAULTS pDatatype As String pDevMode As DEVMODE DesiredAccess As Long End Type
'API Declarations Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long Public Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal HPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As Long, pJob As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'取得指定的打印机,目前有多少 Jobs (最大值为 128) '打印机的名称可以是 mapping 的网络路径名称,例如: "\\myserver\myprinter" Function GetPrinterQueue(PrinterName As String) As Long Dim PrinterStruct As PRINTER_DEFAULTS Dim HPrinter As Long Dim ret As Boolean Dim JobStruct(0 To 127) As Byte Dim pcbNeeded As Long Dim pcReturned As Long Dim TempByte As Byte
'设定 Printer structure 初值 PrinterStruct.pDatatype = vbNullString PrinterStruct.pDevMode.dmSize = Len(PrinterStruct.pDevMode) PrinterStruct.DesiredAccess = PRINTER_ACCESS_USE '取得打印机的 Handle ret = OpenPrinter(PrinterName, HPrinter, PrinterStruct) '取得打印机的 active jobs ret = EnumJobs(HPrinter, 0, 127, 1, TempByte, 0, pcbNeeded, pcReturned) If pcbNeeded = 0 Then GetPrinterQueue = 0 Else ret = EnumJobs(HPrinter, 0, 127, 1, JobStruct(0), pcbNeeded, pcbNeeded, pcReturned) GetPrinterQueue = pcReturned End If '关闭打印机 ret = CloseHandle(HPrinter) End Function
Private Sub UserForm_Initialize() '测试预设打印机的 Queue (Printer.DeviceName) MsgBox "打印机中尚有 " & GetPrinterQueue(Printer.DeviceName) & " 份文件", 64, "提示" End Sub |
|