这个问题前面好像已经有人提出过,可是没有见到有解决的。
enddoc 只是把作业由电脑交给打印机。但是打印机有没有完成还不知道。
用什么样的api可以得到打印机执行的结果呢?
windows2000下,netware 客户端服务可以返回打印机缺纸,打印完成等信息。
请问,我怎样使用这些api函数?如果打印机是本地的。或其他客户机上共享的,是否也能收到这些返回信息?

解决方案 »

  1.   

    我的一个朋友编过这样的程序,他是用来卖给公司一些混饭吃的人,好让他们能过老板那关,并且自己也从中获得利益我刚好今天看望它,随便看了看它的代码,并不很长,记得了用了5个和打印记有关的API,其实知道用什么API后这个程序可以说是没有难度
      

  2.   

    靠!大概我就是你说的那一类混饭吃的人!可是你的朋友没有能够卖给我!
    你知道了api为什么不告诉我?
    卖关子,还是要“获得利益”?
    我无话好说@#¥#!@¥!!
      

  3.   

    你以为我过目不忘?我只是刚好去看望它又刚好看到了它的程序,然后一回家就看到你问这个问题了,这也算是缘分吧,就顺道跟你说说,代码虽说不是很长,但密密码码一大堆你能看一眼就记全?而且API又不是IF,CASE,WHILE这些常用的命令,声明起来动不动就几大行,你能看一眼就说出来

    与其“靠”别人不如靠靠你自己吧
      

  4.   

    Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
    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
      

  5.   

    我查了一下,这个问题好像很复杂。
    问题的要求是怎样知道打印作业是否已被打印机完成,或者因为缺纸等原因失败。周松提出的方法是查打印机中的作业的打印状态。这个方法也许可行。得到打印机作业状态的函数有两个: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参数中得到打印机状态呢?请教高手!请教高手!!
      

  6.   

    ReadPrinter VB声明 
    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,用于装载实际读取字节数的一个变量 
    注解 
    为使这个函数正常使用,端口必须是双向的!!!!!!!!!