获得某一台网络打印机有几份等待打印的报表

    技术2022-05-11  104

    当我们要打印报表时,如果打印机是本机的打印机的话,当然马上就会将报表打印出来,反正打印机就只有您一个人在使用而已!但是如果是在一个人数很多的公司或企业时,往往就必须很多人来分享某一部打印机了,而且打印机也不一定就放在举目可及之处!

    当您将报表丢到网络打印机之后,由于不一定看得到打印机,您必须特别到摆放打印机的地方去拿报表,这时候您最关心的,就是报表印了没有,如果还没有的话,那还有几份还没打印的报表排在您的报表之前呢?

    下面这一段程序,可以让您知道某一台网络打印机尚有几份等待打印的报表?在您的程序丢出报表的同时,您可以告诉您的 User,他的报表排在第几份!

    ′在 .bas 文件中加入以下声明及模组:

    ′Constants DefinitionPublic Const CCHDEVICENAME = 32Public Const CCHFORMNAME = 32Public Const PRINTER_ACCESS_ADMINISTER = &H4Public Const PRINTER_ACCESS_USE = &H8

    ′Types DefinitionPublic Type DEVMODEdmDeviceName As String * CCHDEVICENAMEdmSpecVersion As IntegerdmDriverVersion As IntegerdmSize As IntegerdmDriverExtra As IntegerdmFields As LongdmOrientation As IntegerdmPaperSize As IntegerdmPaperLength As IntegerdmPaperWidth As IntegerdmScale As IntegerdmCopies As IntegerdmDefaultSource As IntegerdmPrintQuality As IntegerdmColor As IntegerdmDuplex As IntegerdmYResolution As IntegerdmTTOption As IntegerdmCollate As IntegerdmFormName As String * CCHFORMNAMEdmUnusedPadding As IntegerdmBitsPerPel As LongdmPelsWidth As LongdmPelsHeight As LongdmDisplayFlags As LongdmDisplayFrequency As LongEnd Type

    Public Type PRINTER_DEFAULTSpDatatype As StringpDevMode As DEVMODEDesiredAccess As LongEnd Type

    ′API DeclarationsPublic 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 LongDim PrinterStruct As PRINTER_DEFAULTSDim HPrinter As LongDim ret As BooleanDim JobStruct(0 To 127) As ByteDim pcbNeeded As LongDim pcReturned As LongDim TempByte As Byte

    ′设定 Printer structure 初值PrinterStruct.pDatatype = vbNullStringPrinterStruct.pDevMode.dmSize = Len(PrinterStruct.pDevMode)PrinterStruct.DesiredAccess = PRINTER_ACCESS_USE′取得打印机的 Handleret = OpenPrinter(PrinterName, HPrinter, PrinterStruct)′取得打印机的 active jobsret = EnumJobs(HPrinter, 0, 127, 1, TempByte, 0, pcbNeeded, pcReturned)If pcbNeeded = 0 ThenGetPrinterQueue = 0Elseret = EnumJobs(HPrinter, 0, 127, 1, JobStruct(0), pcbNeeded, pcbNeeded, pcReturned)GetPrinterQueue = pcReturnedEnd If′关闭打印机ret = CloseHandle(HPrinter)End Function

    ′在表单中放一个 CommandButton,程序码如下:

    Private Sub Command1_Click()′测试预设打印机的 Queue (Printer.DeviceName)Msgbox "打印机中尚有 " & GetPrinterQueue(Printer.DeviceName) & " 份报表", 64, "讯息"End Sub

           以上代码来自: 源代码数据库(SourceDataBase)           当前版本: 1.0.392               作者: Shawls           个人主页: Http://Shawls.Yeah.Net             E-Mail: ShawFile@163.Net                 QQ: 9181729


    最新回复(0)