如何检测打印机状态,比如缺纸

解决方案 »

  1.   

    以下仅供参考,
    小提示:学会查资料
    欢迎支持:http://bbs.yd153.com
    //第一种方法
    function TestPrinterStatus(LPTPort: word): byte; 
    var 
      Status: byte; 
      CheckLPT: word; 
    begin 
      Status := 0; 
      if (LPTPort >= 1) and (LPTPort <= 3) then 
        begin 
          CheckLPT := LPTPort -1; 
          asm 
            mov dx, CheckLPT; 
            mov al, 0; 
            mov ah, 2; 
            int 17h; 
            mov &Status, ah; 
          end; 
        end; 
      Result := Status; 
    end; 
    {
    参数时打印机端口,返回值如下:
    01h - Timeout
    08h - I/O Error 
    10h - Printer selected 
    20h - Out of paper 
    40h - Printer acknowledgement 
    80h - Printer not busy (0 if busy)
    }//第二种方法
    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;第三种方法
    -------来自hubdog的葵花宝典:枚举打印机缓冲池打印任务----------------
    uses Printers, WinSpool;function PrinterStatusText(Status: Integer): String;
    begin
      case Status of
        0:                            Result := 'Waiting';
        JOB_STATUS_PAUSED:            Result := 'Paused';
        JOB_STATUS_ERROR:             Result := 'Error';
        JOB_STATUS_DELETING:          Result := 'Deleting';
        JOB_STATUS_SPOOLING:          Result := 'Spooling';
        JOB_STATUS_PRINTING:          Result := 'Printing';
        JOB_STATUS_OFFLINE:           Result := 'Offline';
        JOB_STATUS_PAPEROUT:          Result := 'Paper Out';
        JOB_STATUS_PRINTED:           Result := 'Printed';
        JOB_STATUS_DELETED:           Result := 'Deleted';
        JOB_STATUS_BLOCKED_DEVQ:      Result := 'Blocked';
        JOB_STATUS_USER_INTERVENTION: Result := 'User Intervention';
        JOB_STATUS_RESTART:           Result := 'Restart';
      else Result := 'Status ' + IntToStr(Status);
      end;
    end;procedure GetJobs(PrinterName: String; JobList: TStrings);
    const
      InfoLevel = 1;
      FirstJob = 0;
      LastJob = 19;
    var
      Jobs: array [FirstJob..LastJob] of TJobInfo1;
      PrinterHandle, BytesNeeded, I, NumJobs: Integer;
    begin
      if OpenPrinter(PChar(PrinterName),PrinterHandle,nil) then begin
        if
    EnumJobs(PrinterHandle,FirstJob,LastJob 1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeed
    ed,NumJobs) then begin
          JobList.Clear;
          for I := 0 to NumJobs-1 do
          with Jobs[I] do
            JobList.Add(Format('%s
    (%s)',[StrPas(pDocument),PrinterStatusText(Status)]));
        end;
        ClosePrinter(PrinterHandle);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      GetJobs('HP Laserjet 4P',Memo1.Lines);
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,Printers,WinSpool;type
      TPrinterInfo   =   record   
            SeverName                   :   PChar;   
            PrinterName               :   PChar;   
            ShareName                   :   PChar;   
            PortName                     :   PChar;   
            DriverName                 :   PChar;   
            Comment                       :   PChar;   
            Location                     :   PChar;   
            DeviceMode                 :   PDeviceModeA;   
            SepFile                       :   PChar;   
            PrintProcessor         :   PChar;   
            DataType                     :   PChar;   
            Parameters                 :   PChar;   
            SecurityDescriptor:   PSecurityDescriptor;   
            Attributes                 :   Cardinal;   
            DefaultPriority       :   Cardinal;   
            StartTime                   :   Cardinal;   
            UntilTime                   :   Cardinal;   
            Status                         :   Cardinal;   
            Jobs                             :   Cardinal;   
            AveragePPM                 :   Cardinal;
        end;     TForm1 = class(TForm)
        ComboBox1: TComboBox;
        Memo1: TMemo;
        procedure FormShow(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function   GetCurrentPrinterHandle:   THandle;   
    var   
        Device,   Driver,   Port   :   array[0..255]   of   char;   
        hDeviceMode:   THandle;   
    begin   
        Printer.GetPrinter(Device,   Driver,   Port,   hDeviceMode);   
        if   not   OpenPrinter(@Device,   Result,   nil)   then   
            RaiseLastWin32Error;   
    end;   function   GetCurrentPrinterInformation:   TPrinterInfo;   
    var   
        hPrinter     :   THandle;   
        pInfo:     PPrinterInfo2;   
        bytesNeeded:   DWORD;   
    begin   
        hprinter   :=   GetCurrentPrinterHandle;   
        try   
            Winspool.GetPrinter(   hPrinter,   2,   Nil,   0,   @bytesNeeded   );   
            pInfo   :=   AllocMem(   bytesNeeded   );   
            try   
                Winspool.GetPrinter(   hPrinter,   2,   pInfo,   bytesNeeded,   @bytesNeeded   );   
                  Result.SeverName                     :=   pInfo^.pServerName;   
                  Result.PrinterName                 :=   pInfo^.pPrinterName;   
                  Result.ShareName                     :=   pInfo^.pShareName;   
                  Result.PortName                       :=   pInfo^.pPortName;   
                  Result.DriverName                   :=   pInfo^.pDriverName;   
                  Result.Comment                         :=   pInfo^.pComment;   
                  Result.Location                       :=   pInfo^.pLocation;   
                  Result.DeviceMode                   :=   pInfo^.pDevMode;   
                  Result.SepFile                         :=   pInfo^.pSepFile;   
                  Result.PrintProcessor           :=   pInfo^.pPrintProcessor;   
                  Result.DataType                       :=   pInfo^.pDatatype;   
                  Result.Parameters                   :=   pInfo^.pParameters;   
                  Result.SecurityDescriptor   :=   pInfo^.pSecurityDescriptor;   
                  Result.Attributes                   :=   pInfo^.Attributes;   
                  Result.DefaultPriority         :=   pInfo^.DefaultPriority;   
                  Result.StartTime                     :=   pInfo^.StartTime;   
                  Result.UntilTime                     :=   pInfo^.UntilTime;   
                  Result.Status                           :=   pInfo^.Status;   
                  Result.Jobs                               :=   pInfo^.cJobs;   
                  Result.AveragePPM                   :=   pInfo^.AveragePPM;   
            finally   
                FreeMem(   pInfo   );   
            end;   
        finally   
            ClosePrinter(   hPrinter   );   
        end;   
    end;
      

  3.   

    procedure TForm1.ComboBox1Change(Sender: TObject);
    var   
        PrinterInfo:   TPrinterInfo;   
    begin   
        PrinterInfo   :=   GetCurrentPrinterInformation;   
        memo1.Clear;
        with   memo1.Lines   do   
        begin   
            Add('GENERAL   INFORMATION');   
            Add('');   
            Add('ServerName:   '   +   PrinterInfo.SeverName);   
            Add('PrinterName:   '   +   PrinterInfo.PrinterName);   
            Add('ShareName:   '   +   PrinterInfo.ShareName);   
            Add('PortName:   '   +   PrinterInfo.PortName);   
            Add('DriverName:   '   +   PrinterInfo.DriverName);   
            Add('Comment:   '   +   PrinterInfo.Comment);   
            Add('Location:   '   +   PrinterInfo.Location);   
            Add('SepFile:   '   +   PrinterInfo.SepFile);   
            Add('PrintProcessor:   '   +   PrinterInfo.PrintProcessor);   
            Add('DataType:   '   +   PrinterInfo.DataType);   
            Add('Parameters:   '   +   PrinterInfo.Parameters);   
            Add('Attributes:   '   +   IntToStr(PrinterInfo.Attributes));   
            Add('DefaultPriority:   '   +   IntToStr(PrinterInfo.DefaultPriority));   
            Add('StartTime:   '   +   IntToStr(PrinterInfo.StartTime));   
            Add('UntilTime:   '   +   IntToStr(PrinterInfo.UntilTime));   
            Add('Status:   '   +   IntToStr(PrinterInfo.Status));   
            Add('Jobs:   '   +   IntToStr(PrinterInfo.Jobs));   
            Add('AveragePPM:   '   +   IntToStr(PrinterInfo.AveragePPM));   
            Add('');   
            Add('DEVICEMODE   INFORMATION');   
            Add('');           Add('DeviceName:   '   +   PrinterInfo.DeviceMode.dmDeviceName);   
            Add('SpecVersion:   '   +   IntToStr(PrinterInfo.DeviceMode.dmSpecVersion));   
            Add('DriverVersion:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDriverVersion));   
            Add('Size:   '   +   IntToStr(PrinterInfo.DeviceMode.dmSize));   
            Add('DriverExtra:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDriverExtra));   
            Add('Fields:   '   +   IntToStr(PrinterInfo.DeviceMode.dmFields));   
            Add('Orientation:   '   +   IntToStr(PrinterInfo.DeviceMode.dmOrientation));   
            Add('PaperSize:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPaperSize));   
            Add('PaperLength:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPaperLength));   
            Add('PaperWidth:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));   
            Add('Scale:   '   +   IntToStr(PrinterInfo.DeviceMode.dmScale));   
            Add('Copies:   '   +   IntToStr(PrinterInfo.DeviceMode.dmCopies));   
            Add('DefaultSource:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDefaultSource));   
            Add('PrintQuality:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPrintQuality));   
            Add('Color:   '   +   IntToStr(PrinterInfo.DeviceMode.dmColor));   
            Add('Duplex:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDuplex));   
            Add('YResolution:   '   +   IntToStr(PrinterInfo.DeviceMode.dmYResolution));   
            Add('TTOption:   '   +   IntToStr(PrinterInfo.DeviceMode.dmTTOption));   
            Add('Collate:   '   +   IntToStr(PrinterInfo.DeviceMode.dmCollate));   
            Add('LogPixels:   '   +   IntToStr(PrinterInfo.DeviceMode.dmLogPixels));   
            Add('BitsPerPel:   '   +   IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel));   
            Add('PelsWidth:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPelsWidth));   
            Add('PelsHeight:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPelsHeight));   
            Add('DisplayFlags:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags));   
            Add('DisplayFrequency:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency));   
            Add('ICMMethod:   '   +   IntToStr(PrinterInfo.DeviceMode.dmICMMethod));   
            Add('ICMintent:   '   +   IntToStr(PrinterInfo.DeviceMode.dmICMIntent));   
            Add('MediaType:   '   +   IntToStr(PrinterInfo.DeviceMode.dmMediaType));   
            Add('DitherType:   '   +   IntToStr(PrinterInfo.DeviceMode.dmDitherType));   
            Add('ICCManufacturer:   '   +   IntToStr(PrinterInfo.DeviceMode.dmICCManufacturer));   
            Add('ICCModel:   '   +   IntToStr(PrinterInfo.DeviceMode.dmICCModel));   
            Add('PanningWidth:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPanningWidth));   
            Add('PanningHeight:   '   +   IntToStr(PrinterInfo.DeviceMode.dmPanningHeight));   
        end;   end;procedure TForm1.FormShow(Sender: TObject);
    begin
        ComboBox1.Items.Assign(Printer.Printers);
        ComboBox1.ItemIndex   :=   0;   
        ComboBox1.OnChange(nil);   end;end.