您的位置:首页 > 其它

判断打印机是否还有任务队列的方法~

2012-11-16 12:46 225 查看
Private Structure PRINTER_DEFAULTS
Dim pDatatype As String
Dim pDevMode As Integer
Dim DesiredAccess As Integer
End Structure

Private Const PRINTER_ACCESS_ADMINISTER As Integer = &H4
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, ByRef phPrinter As Integer, ByRef pDefault As PRINTER_DEFAULTS) As Integer

Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal hPrinter As Integer, ByVal FirstJob As Integer, ByVal NoJobs As Integer, ByVal Level As Integer, ByRef pJob As Byte, ByVal cdBuf As Integer, ByRef pcbNeeded As Integer, ByRef pcReturned As Integer) As Integer

Private Structure SYSTEMTIME
Dim wYear As Short
Dim wMonth As Short
Dim wDayOfWeek As Short
Dim wDay As Short
Dim wHour As Short
Dim wMinute As Short
Dim wSecond As Short
Dim wMilliseconds As Short
End Structure

Private Structure JOB_INFO_1
Dim JobId As Integer
Dim pPrinterName As Integer
Dim pMachineName As Integer
Dim pUserName As Integer
Dim pDocument As Integer
Dim pDatatype As Integer
Dim pStatus As Integer
Dim Status As Integer
Dim Priority As Integer
Dim Position As Integer
Dim TotalPages As Integer
Dim PagesPrinted As Integer
Dim Submitted As SYSTEMTIME
End Structure

Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Integer) As Integer

Public Function HasJobs(ByVal PrinterName As String) As Integer
Dim hPrinter As Integer
Dim RetVal As Integer
Dim pd As New PRINTER_DEFAULTS
Dim aJi1() As Byte
Dim dwBytesNeed As Integer
Dim dwBytesRet As Integer
Dim lngSize As Integer
Dim JI_1 As JOB_INFO_1

lngSize = Len(JI_1)
pd.DesiredAccess = PRINTER_ACCESS_ADMINISTER
RetVal = OpenPrinter(PrinterName, hPrinter, pd)
ReDim aJi1(lngSize - 1)
RetVal = EnumJobs(hPrinter, 0, 3, 1, aJi1(0), lngSize, dwBytesNeed, dwBytesRet)

If RetVal = 0 And dwBytesNeed = 0 Then
ClosePrinter(hPrinter)
Return -1
End If

ClosePrinter(hPrinter)

If dwBytesNeed = 0 Then
Return 0
Else
Return 1
End If

End Function

与前篇一样这个算是VB6时代的方法,如果你更好的基于.Net的方法,请赐教!happybasic@163.com
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: