如何用代码快速清除打印机任务?

lyshw 2004-04-16 08:45:19
如何用代码快速清除打印机任务?
...全文
671 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cslf 2004-04-20
  • 打赏
  • 举报
回复
打印机服务器不来米了没法测试setjob 来删除打印任务,其它都是正常的,你单步执行看看。
DeviceName(i)取得打印机名称如:"\\jtzn_srv\epson"
ret = EnumJobs(hPrinter, 0, 127, 1, TempByte, 0, pcbNeeded, pcReturned)'枚举hPrinter的打印任务ID(0-127)
SetJob hPrinter, 0, 1, JobStruct(0), JOB_CONTROL_CANCEL改为SetJob hPrinter, j, 1, JobStruct(0), JOB_CONTROL_CANCEL'删除任务j
lyshw 2004-04-20
  • 打赏
  • 举报
回复
我试了试不行
麻烦cslf大哥给我发份调试好的代码吧,多谢了
sdshw@126.com
cslf 2004-04-19
  • 打赏
  • 举报
回复
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 ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EnumPrinters Lib "winspool.drv" _
Alias "EnumPrintersA" _
(ByVal Flags As Long, ByVal name As String, _
ByVal Level As Long, pPrinterEnum As Long, _
ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) _
As Long
'
Private 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

Private Declare Function SetJob Lib "winspool.drv" Alias "SetJobA" (ByVal hPrinter As Long, ByVal JobId As Long, ByVal Level As Long, pJob As Byte, ByVal Command As Long) As Long
Const JOB_CONTROL_CANCEL = 3


Private Type PRINTER_DEFAULTS
pDatatype As String
pDevMode As Long
DesiredAccess As Long
End Type

Dim l1 As Long, hPrinter As Long
Private Const PRINTER_ENUM_LOCAL = &H2
Private Const PRINTER_ENUM_CONNECTIONS = &H4
Private Const PRINTER_ENUM_NAME = &H8
Private Const PRINTER_ENUM_NETWORK = &H40
Private Const PRINTER_ENUM_REMOTE = &H10
Private Const PRINTER_ENUM_SHARED = &H20
Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyA" (ByVal RetVal As String, ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "kernel32" Alias "lstrlenA" (ByVal Ptr As Long) As Long

'取得打印机
Dim bReturn As Boolean
Dim lFlags As Long
Dim sName As String
Dim lLevel As Long
Dim lBuffer() As Long
Dim lCdBuf As Long
Dim lPcbNeeded As Long
Dim lEntries As Long
Dim i As Integer
Dim lTemp As Long
Dim sTempString As String
Dim Def_Printer As PRINTER_DEFAULTS
Dim JobStruct(0 To 127) As Byte
Dim pcbNeeded As Long
Dim pcReturned As Long
Dim TempByte As Byte
Dim j As Integer


lFlags = PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL
sName = vbNullString
lLevel = 4
lCdBuf = 3072
ReDim lBuffer((lCdBuf \ 4) - 1) As Long
bReturn = EnumPrinters(lFlags, sName, lLevel, lBuffer(0), lCdBuf, lPcbNeeded, lEntries)
PrinterCount = lEntries ' Number Printers Found
ReDim DeviceName(0 To PrinterCount - 1) As String
ReDim Server(0 To PrinterCount - 1) As String
For i = 0 To PrinterCount - 1 ' Set the Device Name
sTempString = Space(StrLen(lBuffer(i * 3)))
lTemp = PtrToStr(sTempString, lBuffer(i * 3))
DeviceName(i) = sTempString ' Set the Server Name
Next i
'打开
OpenPrinter DeviceName(0), hPrinter, Def_Printer
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
For j = 0 To pcReturned
SetJob hPrinter, 0, 1, JobStruct(0), JOB_CONTROL_CANCEL
Next

'关闭
closePrinter hPrinter

cslf 2004-04-19
  • 打赏
  • 举报
回复
Type PRINTER_DEFAULTS
pDatatype As String
pDevMode As Long
DesiredAccess As Long
End Type
说明
This structure specifies default information for a printer.
字段表
字段 类型及说明
pDatatype String,打印机使用的默认数据类型的名字。可设为vbNullString,表示使用当前的默认配置
pDevMode Long,打印机默认配置信息的一个地址。可设为零,表示使用当前默认设置
DesiredAccess
cslf 2004-04-19
  • 打赏
  • 举报
回复
上面就是现成的哈。
lyshw 2004-04-19
  • 打赏
  • 举报
回复
没有现成的DLL吗
cslf 2004-04-16
  • 打赏
  • 举报
回复
相关常量去API浏览器中找。
cslf 2004-04-16
  • 打赏
  • 举报
回复
Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
说明
打开指定的打印机,并获取打印机的句柄
'''
Declare Function SetJob Lib "winspool.drv" Alias "SetJobA" (ByVal hPrinter As Long, ByVal JobId As Long, ByVal Level As Long, pJob As Byte, ByVal Command As Long) As Long
说明
对一个打印作业的状态进行控制
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hPrinter Long,指定一个打开打印机的句柄(用OpenPrinter取得)
JobId Long,要修改的作业的编号
Level Long,0,1或2
pJob Byte,指定一个缓冲区。如级别(Level)设为1或2,那该缓冲区就包含了一个JOB_INFO_1或JOB_INFO_2结构。如级别为0,缓冲区为NULL(变成ByVal As Long,以便传递零值)。如指定了一个结构,则来自那个结构的信息会用于改变打印作业的设置(除JobId,pPrinterName,pMachineName,pDriverName,Size,Submitte以及Time字段外)
Command Long,下述常数之一:
JOB_CONTROL_CANCEL 取消作业
JOB_CONTROL_PAUSE 暂停作业
JOB_CONTROL_RESTART 重新启动一个已开始打印的作业
JOB_CONTROL_RESUME 恢复一个暂停的作业

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧