|
如何在程序里判断一个打印作业已经进入打印队列(也就是可以在打印管理程序里看到该作业的信息),或者说如何察看打印队列里已有的作业信息?qi9Linux联盟 qi9Linux联盟 看下面的这个例程。还有测试代码。qi9Linux联盟 qi9Linux联盟
qi9Linux联盟 uses WinSpool; qi9Linux联盟 type JOB_INFO_1_ARRAY = Array of JOB_INFO_1; qi9Linux联盟 Function GetSpoolerJobs(sPrinterName : String) : JOB_INFO_1_ARRAY; qi9Linux联盟 var qi9Linux联盟 i : Integer; qi9Linux联盟 hPrinter : THandle; qi9Linux联盟 bResult : Boolean; qi9Linux联盟 cbBuf : DWORD; qi9Linux联盟 pcbNeeded : DWORD; qi9Linux联盟 pcReturned : DWORD; qi9Linux联盟 aJobs : Array[0..99] of JOB_INFO_1; qi9Linux联盟 begin qi9Linux联盟 cbBuf := 1000; qi9Linux联盟 qi9Linux联盟 bResult := OpenPrinter(PChar(sPrinterName), hPrinter, Nil); qi9Linux联盟 if NOT bResult then begin qi9Linux联盟 ShowMessage('Error opening the printer'); qi9Linux联盟 exit; qi9Linux联盟 end; qi9Linux联盟 qi9Linux联盟 bResult := EnumJobs(hPrinter,0,Length(aJobs),1,@aJobs,cbBuf,pcbNeeded,pcReturned); qi9Linux联盟 if NOT bResult then begin qi9Linux联盟 ShowMessage('Error Getting Jobs information'); qi9Linux联盟 exit; qi9Linux联盟 end; qi9Linux联盟 qi9Linux联盟 for i:=0 to pcReturned-1 do begin qi9Linux联盟 if aJobs[i].pDocument <> Nil then begin qi9Linux联盟 SetLength(Result, Length(Result)+1); qi9Linux联盟 Result[Length(Result)-1] := aJobs[i]; qi9Linux联盟 end; qi9Linux联盟 end; qi9Linux联盟 end; |
qi9Linux联盟 qi9Linux联盟 测试例子:qi9Linux联盟 1- 创建工程有 StringGrid 和一个 Timer. qi9Linux联盟 2- StringGrid 'ColCount' and “RowCount” 值为 20qi9Linux联盟 3- Timer的 “Interval” 属性值 500. qi9Linux联盟 4- “OnTime” 实践中写这个代码qi9Linux联盟
qi9Linux联盟 procedure TForm1.Timer1Timer(Sender: TObject); qi9Linux联盟 var qi9Linux联盟 i, ii : Integer; qi9Linux联盟 aJobs : JOB_INFO_1_ARRAY; qi9Linux联盟 begin qi9Linux联盟 for i:=0 to StringGrid1.ColCount-1 do qi9Linux联盟 for ii:=0 to StringGrid1.RowCount-1 do StringGrid1.Cells[i,ii] := ''; qi9Linux联盟 qi9Linux联盟 aJobs := GetSpoolerJobs('\\ibmserver\HP LaserJet 1100');//正在打印的打印机名字,这里我的打印机时网打。这里你要自己改qi9Linux联盟 qi9Linux联盟 for i:=0 to Length(aJobs)-1 do begin qi9Linux联盟 StringGrid1.Cells[i,0] := aJobs[i].pPrinterName; qi9Linux联盟 StringGrid1.Cells[i,1] := aJobs[i].pMachineName; qi9Linux联盟 StringGrid1.Cells[i,2] := aJobs[i].pUserName; qi9Linux联盟 StringGrid1.Cells[i,3] := aJobs[i].pDocument; qi9Linux联盟 StringGrid1.Cells[i,4] := aJobs[i].pDatatype; qi9Linux联盟 StringGrid1.Cells[i,5] := aJobs[i].pStatus; qi9Linux联盟 StringGrid1.Cells[i,6] := IntToStr(aJobs[i].Status); qi9Linux联盟 qi9Linux联盟 case aJobs[i].Status of qi9Linux联盟 JOB_STATUS_PAUSED: StringGrid1.Cells[i,6] := 'JOB_STATUS_PAUSED'; qi9Linux联盟 JOB_STATUS_ERROR: StringGrid1.Cells[i,6] := 'JOB_STATUS_ERROR'; qi9Linux联盟 JOB_STATUS_DELETING: StringGrid1.Cells[i,6] := 'JOB_STATUS_DELETING'; qi9Linux联盟 JOB_STATUS_SPOOLING: StringGrid1.Cells[i,6] := 'JOB_STATUS_SPOOLING'; qi9Linux联盟 JOB_STATUS_PRINTING: StringGrid1.Cells[i,6] := 'JOB_STATUS_PRINTING'; qi9Linux联盟 JOB_STATUS_OFFLINE: StringGrid1.Cells[i,6] := 'JOB_STATUS_OFFLINE'; qi9Linux联盟 JOB_STATUS_PAPEROUT: StringGrid1.Cells[i,6] := 'JOB_STATUS_PAPEROUT'; qi9Linux联盟 JOB_STATUS_PRINTED: StringGrid1.Cells[i,6] := 'JOB_STATUS_PRINTED'; qi9Linux联盟 JOB_STATUS_DELETED: StringGrid1.Cells[i,6] := 'JOB_STATUS_DELETED'; qi9Linux联盟 JOB_STATUS_BLOCKED_DEVQ: StringGrid1.Cells[i,6] := 'JOB_STATUS_BLOCKED_DEVQ'; qi9Linux联盟 JOB_STATUS_USER_INTERVENTION: StringGrid1.Cells[i,6] := 'JOB_STATUS_USER_INTERVENTION'; qi9Linux联盟 JOB_STATUS_RESTART: StringGrid1.Cells[i,6] := 'JOB_STATUS_RESTART'; qi9Linux联盟 JOB_POSITION_UNSPECIFIED: StringGrid1.Cells[i,6] := 'JOB_POSITION_UNSPECIFIED'; qi9Linux联盟 qi9Linux联盟 else StringGrid1.Cells[i,6] := 'Unknown status...'; qi9Linux联盟 end; qi9Linux联盟 end; qi9Linux联盟 qi9Linux联盟 StringGrid1.Refresh; qi9Linux联盟 end; |
qi9Linux联盟 qi9Linux联盟 5- 运行程序,打印程序测之qi9Linux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|