得到本机或者网络上共享打印机的状态和打印任务

//得到本机或者网络上共享打印机的状态和打印任务
//author:ginsonic
//zdcnow download from E-E

use 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,NumJobs:Cardinal;
   I: Integer;
begin
   if OpenPrinter(PChar(PrinterName),PrinterHandle,nil) then
   begin
     if   EnumJobs(PrinterHandle,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs)
,BytesNeeded,NumJobs) then begin
       JobList.Clear;
       for I := 0 to NumJobs-1 do
       with Jobs[I] do
         JobList.Add(Format('%s(%s)',[StrPas(pDocument),PrinterStatusText(Statu
s)]));
     end;
     ClosePrinter(PrinterHandle);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   GetJobs('\\rcsrv\HP LaserJet 6L',Memo1.Lines);
end; 

posted @ 2013-05-01 16:44  小天1981  阅读(557)  评论(0编辑  收藏  举报