GetPrintProcessorDirectory 获取打印机驱动处理器路径GetPrinter 获取打印机信息GetPrinterData 获取打印机配置信息GetPrinterDriver 获取打印机驱动程序信息GetPrinterDriverDirectory 获取打印机驱动程序路径****************************************************************** 可用CREATEFILE以PRN为文件名生成一个文件,检测返回值,若成功则打印机可用,否则显示打印机故障。生成关于PRN的文件句柄后,可象普通文件一样向文件写入内容,比如WRITE,写完后关闭文件。//从并行端口读取打印机状态function GetPrinterStatus:byte;asmMOV DX,$379;IN AL,DX;end;//获取打印机是否出错function CheckPrinter:boolean;vartemp:byte;begintemp:=GetPrinterStatus;Result:=not ( ((temp and $80)=0) //打印机忙or ((temp and $20)<>0) //打印机缺纸or ((temp and $10)=0) //打印机未联机or ((temp and $08)=0) ); //打印机出错;end;
//以下代码可以查看打印机状态,如果打印机有打印任务,显示前20个打印任务. //可以用在网络或者本地打印机上.//得到本机或者网络上共享打印机的状态 //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(Status)])); end; ClosePrinter(PrinterHandle); end; end;procedure TForm1.Button1Click(Sender: TObject); begin //放个memo1来显示状态和打印任务,注意改为你的打印机路径和名称 GetJobs('Star AR-3200+',Memo1.Lines); end;
可用CREATEFILE以PRN为文件名生成一个文件,检测返回值,若成功则打印机可用,否则显示打印机故障。生成关于PRN的文件句柄后,可象普通文件一样向文件写入内容,比如WRITE,写完后关闭文件。//从并行端口读取打印机状态function GetPrinterStatus:byte;asmMOV DX,$379;IN AL,DX;end;//获取打印机是否出错function CheckPrinter:boolean;vartemp:byte;begintemp:=GetPrinterStatus;Result:=not ( ((temp and $80)=0) //打印机忙or ((temp and $20)<>0) //打印机缺纸or ((temp and $10)=0) //打印机未联机or ((temp and $08)=0) ); //打印机出错;end;
//可以用在网络或者本地打印机上.//得到本机或者网络上共享打印机的状态
//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(Status)]));
end;
ClosePrinter(PrinterHandle);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
//放个memo1来显示状态和打印任务,注意改为你的打印机路径和名称
GetJobs('Star AR-3200+',Memo1.Lines);
end;