得到本机或者网络上共享打印机的状态和打印任务
//得到本机或者网络上共享打印机的状态和打印任务
//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;