这个问题前面好像已经有人提出过,可是没有见到有解决的。
enddoc 只是把作业由电脑交给打印机。但是打印机有没有完成还不知道。
用什么样的api可以得到打印机执行的结果呢?
windows2000下,netware 客户端服务可以返回打印机缺纸,打印完成等信息。
请问,我怎样使用这些api函数?如果打印机是本地的。或其他客户机上共享的,是否也能收到这些返回信息?
enddoc 只是把作业由电脑交给打印机。但是打印机有没有完成还不知道。
用什么样的api可以得到打印机执行的结果呢?
windows2000下,netware 客户端服务可以返回打印机缺纸,打印完成等信息。
请问,我怎样使用这些api函数?如果打印机是本地的。或其他客户机上共享的,是否也能收到这些返回信息?
解决方案 »
- 才知道原来老大是Vb版的前辈
- 如何由*.hhc 和 *.hhk 及相应的*.html文件生成.chm帮助文件(没有*.hhp文件)
- 自定义资源文件的一个问题
- VB中,与下位机进行通讯时,程序运行大概一个小时后,出现没有为命令对象设置命令?
- 我该怎样打包?
- 哪里有VB的安装程序?????????大哥帮帮忙~~~~~~~~
- 关于vista系统运行的问题?我的vb程序在xp及2000运行正常,在 vista上运行报错!
- 为什么在以下程序运行的时候窗口没有打印“5”阿,为什么都没有出现呢?
- vb中使用水晶报表的问题
- 一个日期控件中的查询问题?
- 在文本框中选中文本,使其高亮显示问题。高手帮帮忙!
- 如何执行带开关的DOS程序!
你知道了api为什么不告诉我?
卖关子,还是要“获得利益”?
我无话好说@#¥#!@¥!!
?
与其“靠”别人不如靠靠你自己吧
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter 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 Any, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Sub Form_Load() Dim hPrinter As Long, lNeeded As Long, lReturned As Long
Dim lJobCount As Long
OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned
If lNeeded > 0 Then
ReDim byteJobsBuffer(lNeeded - 1) As Byte
EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned
If lReturned > 0 Then
lJobCount = lReturned
Else
lJobCount = 0
End If
Else
lJobCount = 0
End If
ClosePrinter hPrinter
If lJobCount = 0 Then
MsgBox "没有打印作业!"
Else
MsgBox "打印队列项: " + CStr(lJobCount), vbInformation
End If
End Sub
问题的要求是怎样知道打印作业是否已被打印机完成,或者因为缺纸等原因失败。周松提出的方法是查打印机中的作业的打印状态。这个方法也许可行。得到打印机作业状态的函数有两个:GetJob 和EnumJobs.这两个函数使用起来好像有些复杂,其中返回的一个参数是Job_info_2结构变量。这里面也许包含了作业状态信息。
但是这个结构是什么样的,我不知道,有网友推荐以下的内容
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q160/1/29.asp&NoWebContent=1
可是这个功能是C写的,我不知道vb怎么实现。除了这种查询打印机作业状态的方法,还有没有别的更简单的方法?也许没有了吧?
那么究竟该怎么得到我刚才由DataReport发出的这个作业的id,又怎么从api返回的job_info_1参数中得到打印机状态呢?请教高手!请教高手!!
Declare Function ReadPrinter Lib "winspool.drv" Alias "ReadPrinter" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pNoBytesRead As Long) As Long
说明
从打印机读入数据
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hPrinter Long,一个已打开的打印机的句柄(用OpenPrinter获得)
pBuf Any,指定一个缓冲区或结构,用于装载来自打印机的数据
cdBuf Long,欲读入的缓冲区大小或字节数
pNoBytesRead Long,用于装载实际读取字节数的一个变量
注解
为使这个函数正常使用,端口必须是双向的!!!!!!!!!