• 打印机状态测试


    试试这个吧  
     
    //获得缺省打印机的状态  
       
     
    var  
          pinfo:   pPRINTERINFO2;  
          pprt,a:   Cardinal;  
          b:PDWORD;  
     
    begin  
          b:
    =allocmem(256);  
          pinfo:
    =AllocMem(1000);  
         
    if   OpenPrinter('HP   DJ   200',pprt,nil)   then  
         
    begin  
              a:
    =1000;  
             
    if   getprinter(pprt,2,pinfo,a,b)   then  
                  showmessage(pinfo.pPrinterName
    +'   ststus:'+inttostr(pinfo.Status));  
          ClosePrinter(pprt);  
         
    end;  
           
          freemem(b);  
          freemem(pinfo);  
     
    end;  
       
      PRINTER_INFO_
    2.Status   :  
        Windows   NT:    
            PRINTER_STATUS_PAUSED  
            PRINTER_STATUS_PENDING_DELETION    
        Windows  
    95:    
            PRINTER_STATUS_BUSY  
            PRINTER_STATUS_DOOR_OPEN  
            PRINTER_STATUS_ERROR  
            PRINTER_STATUS_INITIALIZING  
            PRINTER_STATUS_IO_ACTIVE  
            PRINTER_STATUS_MANUAL_FEED  
            PRINTER_STATUS_NO_TONER  
            PRINTER_STATUS_NOT_AVAILABLE  
            PRINTER_STATUS_OFFLINE  
            PRINTER_STATUS_OUT_OF_MEMORY  
            PRINTER_STATUS_OUTPUT_BIN_FULL  
            PRINTER_STATUS_PAGE_PUNT  
            PRINTER_STATUS_PAPER_JAM  
            PRINTER_STATUS_PAPER_OUT  
            PRINTER_STATUS_PAPER_PROBLEM  
            PRINTER_STATUS_PAUSED  
            PRINTER_STATUS_PENDING_DELETION  
            PRINTER_STATUS_PRINTING  
            PRINTER_STATUS_PROCESSING  
            PRINTER_STATUS_TONER_LOW  
            PRINTER_STATUS_UNAVAILABLE  
            PRINTER_STATUS_USER_INTERVENTION  
            PRINTER_STATUS_WAITING  
            PRINTER_STATUS_WARMING_UP    
     
    //////////////////////////////////////////////////////////////////  
      unit   PrinterStatus;  
       
      interface  
       
      uses  
          Windows,   Messages,   WinProcs,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs;  
       
       
     
    //   TPrinterstatus  
     
    //   Komponente   zum   Abfragen   des   aktuellen   Druckerportstatus  
     
    //   Programmiert   2000   von   K.   Otto  
     
    //   funktioniert   unter   Win   9x,   jedoch   nicht   unter   Win   NT  
     
    //   ---------------------------------  
     
    //   Status:   Freeware   incl.   Sourcecode  
     
    //   ---------------------------------  
     
    //   Diese   Komponente   beruht   auf   einem   Beitrag   von   Robert   Vivrette  
     
    //   f黵   "The   unofficial   Newsletter   of   Delphi   Users"  
     
    //   http://www.undu.com/articles/990228a.html  
       
     
    type  
          TPrinterStatus  
    =   class(TComponent)  
          private  
             
    {   Private-Deklarationen   }  
              fStatus   :   Byte;  
              fLPT         :   Integer;  
              Function   GetTimeOut   :   Boolean;  
              Function   GetIOError   :   Boolean;  
              Function   GetPrinterSelected   :   Boolean;  
              Function   GetOutOfPaper   :   Boolean;  
              Function   GetAcknowledgement   :   Boolean;  
              Function   GetPrinterBusy   :   Boolean;  
          protected  
             
    {   Protected-Deklarationen   }  
          public  
             
    {   Public-Deklarationen   }  
              Procedure   CheckPrinterStatus;  
    //   Liest   den   Druckerstatus   der   angegeben   LPT-Schnittstelle  
              Constructor   Create(AOwner   :   TComponent);   Override;  
              Property   TimeOut   :   Boolean   Read   GetTimeOut;  
              Property   IOError     :   Boolean   Read   GetIOError;  
              Property   PrinterSelected   :   Boolean   Read   GetPrinterSelected;  
              Property   OutOfPaper   :   Boolean   Read   GetOutOfPaper;  
              Property   Acknowledgement   :   Boolean   Read   GetAcknowledgement;  
              Property   Busy   :   Boolean   Read   GetPrinterBusy;  
          published  
             
    {   Published-Deklarationen   }  
              Property   LPT   :   Integer   Read   fLPT   Write   fLPT;  
         
    end;  
       
     
    procedure   Register;  
       
      implementation  
       
     
    procedure   Register;  
     
    begin  
          RegisterComponents(
    'Eigene',   [TPrinterStatus]);  
     
    end;  
       
      Function   TPrinterStatus.GetTimeOut   :   Boolean;  
      Begin  
                Result:
    =(fStatus   and   $01)=$01;  
      End;  
       
      Function   TPrinterStatus.GetIOError   :   Boolean;  
      Begin  
                Result:
    =(fStatus   and   $08)=$08;  
      End;  
       
      Function   TPrinterStatus.GetPrinterSelected   :   Boolean;  
      Begin  
                Result:
    =(fStatus   and   $10)=$10;  
      End;  
       
      Function   TPrinterStatus.GetOutOfPaper   :   Boolean;  
      Begin  
                Result:
    =(fStatus   and   $20)=$20;  
      End;  
       
      Function   TPrinterStatus.GetAcknowledgement   :   Boolean;  
      Begin  
                Result:
    =(fStatus   and   $40)=$40;  
      End;  
       
      Function   TPrinterStatus.GetPrinterBusy   :   Boolean;  
      Begin  
                Result:
    =not   ((fStatus   and   $80)=$80);  
      End;  
       
      Procedure   TPrinterStatus.CheckPrinterStatus;  
      Var  
            Status   :   Byte;  
            CheckLPT   :   Word;  
      Begin  
                Status:
    =0;  
                If   (fLPT
    >=1)   and   (fLPT<=3)   Then  
                Begin  
                          CheckLPT:
    =fLPT-1;  
                          asm  
                              mov   dx,CheckLPT;  
                              mov   al,
    0;  
                              mov   ah,
    2;  
                              int   17h;  
                              mov   &Status,   ah;  
                          End;  
                End;  
                fStatus:
    =Status;  
      End;  
       
      Constructor   TPrinterStatus.Create(AOwner   :   TComponent);  
      Begin  
                Inherited   Create(AOwner);  
                fLPT:
    =1;  
                fStatus:
    =0;  
      End;  
       
     
    end.  
     
    //////////////////////////////////////////////////////  
      用法:  
       
       
    if   not   PrinterStatus1.PrinterReady(0)   then     //0   =   current   printerport  
          ShowMessage(PrinterStatus1.StatusMsg)  
    else   {print   print   print}   ;  
       
      unit   PrinterStatus;  
       
      interface   
        
     uses  
          Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs;  
       
      type  
          TPrinterStatus  
    =   class(TComponent)  
          private  
             
    {   Private   declarations   }  
              FPort   :   Word;  
              FStatusStr   :   string;  
          protected  
             
    {   Protected   declarations   }  
          public  
             
    {   Public   declarations   }  
             
    function   PrinterReady(LPT:   Word):   boolean;  
          published  
             
    {   Published   declarations   }  
              property   StatusMsg:   string   read   FStatusStr;  
         
    end;  
       
     
    procedure   Register;  
       
      implementation  
      uses   Printers;  
       
     
    procedure   Register;  
     
    begin  
          RegisterComponents(
    'Win95',   [TPrinterStatus]);  
     
    end;  
       
     
    const  
          PrnReady  
    =   $90;  
          OffLine  
    =   $00;  
          OffLine2  
    =   $10;                           {NEW   LINE}  
          PaperOut  
    =   $20;  
          PaperOut2  
    =   $30;                         {NEW   LINE}  
          HookedButOff  
    =   $80;                   {NEW   LINE}  
          NoConnect  
    =   $B0;                         {MODIFIED   LINE}  
       
         
    {NOCONNECT   =   $30   FOR   SOME   COMPUTERS   BY   STU}  
       
     
    function   TPrinterStatus.PrinterReady(LPT:   Word):   boolean;  
     
    var  
          ErrorCode,   C   :   BYTE;  
          code,   x   :   integer;  
          s   :   string;  
       
                           
    function   GetPrinterStatus   (LPT:   Word):   Byte;  
                           
    {Pass   1   in   LPT   for   LPT1}  
                           
    begin  
                                asm  
                                    mov   ah,
    2  
                                    mov   dx,LPT  
                                    dec   dx  
                                    int   $
    17  
                                    mov   @Result,ah  
                               
    end;  
                           
    end;     {GetPrinterStatus}  
       
       
     
    begin  
        result   :
    =   false;     //assume   not  
       
        FPort   :
    =   LPT;  
       
    if   FPort   =   0   then   begin     {if   no   port   specified   then   try   to   set   port   to   current  
      printer   port
    }  
           
    {printer   name}  
            s   :
    =   Printer.Printers[Printer.PrinterIndex];  
           
    if   Pos('FPort',s)   <>   0   then   begin  
                s   :
    =   Copy(s,   Pos('FPort',s)   +3,   1);  
                Val(s,x,code);  
               
    if   code   <>   0   then   FPort   :=   1   else   FPort   :=   x;  
           
    end   else   FPort   :=   1;     {default   to   LPT1}  
       
    end;  
       
       
    {valid   LPT   is   1..4}  
       
    if   (FPort   >   4)   or   (FPort   <   1)   then   begin  
            raise   ERangeError.CreateFmt(  
               
    'LPT%d   is   not   within   the   valid   range   of   %d..%d',  
                [FPort,  
    1,   4]);  
            exit;  
       
    end;  
       
       
        ErrorCode   :
    =   GetPrinterStatus(FPort);  
       
        ErrorCode   :
    =   ErrorCode   and   $B0;               {NEW   LINE}  
       
        C   :
    =   ERRORCODE   shl   6;       {ALWAYS   MEANS   NOTHING   CONNECTED}  
       
       
    if   C   >   0   then   ERRORCODE   :=   $B0;   {ELEMINATES   NO   LPT3   AND   NOTHING   CONNECTED}  
       
       
    case   ErrorCode   of  
          PrnReady                         :  
    begin   FStatusStr   :=   'Printer   Ready';   result   :=   true;  
     
    end;  
          NoConnect                       :   FStatusStr   :
    =   'Printer   not   connected';  
          Offline,OffLine2         :   FStatusStr   :
    =   'Printer   off   line';           {Modified}  
          PaperOut,PaperOut2     :   FStatusStr   :
    =   'Printer   out   of   paper';   {Modified}  
          HookedButOff                 :   FStatusStr   :
    =   'Printer   connected   but   turned   off';   {New}  
       
    else  
          FStatusStr   :
    =   'Printer   error   code:   '   +   IntToStr(ErrorCode);  
       
    end;  
       
     
    end;   
    //////////////////////////////////////////////////////////////////////   
     
    //获取打印机状态  
    可用CREATEFILE以PRN为文件名生成一个文件,检测返回值,若成功则打印机可用,否则显示打印机故障。生成关于PRN的文件句柄后,可象普通文件一样向文件写入内容,比如WRITE,写完后关闭文件。


    //从并行端口读取打印机状态
    function

    GetPrinterStatus:byte;
    asm
       MOV DX,$
    379;
      IN AL,DX;
    end;
    //获取打印机是否出错
    function CheckPrinter:boolean;
    var
    temp:byte;
    begin
       temp:
    =GetPrinterStatus;
       Result:
    =not ( ((temp and $80)=0) //打印机忙
     
    or ((temp and $20)<>0//打印机缺纸
     
    or ((temp and $10)=0)    //打印机未联机
     
    or ((temp and $08)=0) ); //打印机出错;
    end;

        
     

  • 相关阅读:
    php 中ASCII编码的使用
    BASE64
    微信公众平台--6.JS-SDK 微信内网页开发工具包
    python3中zipfile模块的常用方法
    python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
    python3开发进阶-Django框架的起飞加速一(ORM)
    python3开发进阶-Django框架起飞前的准备
    python3开发进阶-Web框架的前奏
    前端基础-jQuery的最常用的的方法each、data、
    前端基础-jQuery的动画效果
  • 原文地址:https://www.cnblogs.com/hssbsw/p/2350336.html
Copyright © 2020-2023  润新知