delphi编程获取打印机的打印任务列表

时间:2010-01-30 12:19:03  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:olordark="#ffffff" cellpadding="5" width="99%" bgcolor="#e8ffe8" border="1">uses WinSpool; type JOB_INFO_1_ARRAY = Array of JOB_INFO_1; Function GetSpoolerJobs(sPrinterName : String) : JOB_INFO_1_ARRAY; var i : Integer; hPrinter : THandle; bResult : Boolean; cbBuf : DWORD; pcbNeeded :...
  正文:如何在程序里判断一个打印作业已经进入打印队列(也就是可以在打印管理程序里看到该作业的信息),或者说如何察看打印队列里已有的作业信息?

看下面的这个例程。还有测试代码


uses WinSpool;
type JOB_INFO_1_ARRAY = Array of JOB_INFO_1;
Function GetSpoolerJobs(sPrinterName : String) : JOB_INFO_1_ARRAY;
var
i : Integer;
hPrinter : THandle;
bResult : Boolean;
cbBuf : Dword;
pcbNeeded : DWORD;
pcReturned : DWORD;
aJobs : Array[0..99] of JOB_INFO_1;
begin
  cbBuf := 1000;
  
  bResult := OpenPrinter(PChar(sPrinterName), hPrinter, Nil);
  if NOT bResult then begin
    ShowMessage('Error opening the printer');
    exit;
  end;
  
  bResult := EnumJobs(hPrinter,0,Length(aJobs),1,@aJobs,cbBuf,pcbNeeded,pcReturned);
  if NOT bResult then begin
    ShowMessage('Error Getting Jobs information');
    exit;
  end;
  
  for i:=0 to pcReturned-1 do begin
    if aJobs[i].pDocument <> Nil then begin
      SetLength(Result, Length(Result)+1);
      Result[Length(Result)-1] := aJobs[i];
    end;
  end;
end;


测试例子:
1- 创建工程有 StringGrid 和一个 Timer.
2- StringGrid 'ColCount' and “RowCount” 值为 20
3- Timer的 “Interval” 属性值 500.
4- “OnTime” 实践中写这个代码

procedure TForm1.Timer1Timer(Sender: TObject);
var
i, ii : Integer;
aJobs : JOB_INFO_1_ARRAY;
begin
  for i:=0 to StringGrid1.ColCount-1 do
  for ii:=0 to StringGrid1.RowCount-1 do StringGrid1.Cells[i,ii] := '';
  
  aJobs := GetSpoolerJobs('ibmserverHP LaserJet 1100');//正在打印的打印机名字,这里我的打印机时网打。这里你要自己改

  for i:=0 to Length(aJobs)-1 do begin
    StringGrid1.Cells[i,0] := aJobs[i].pPrinterName;
    StringGrid1.Cells[i,1] := aJobs[i].pMachineName;
    StringGrid1.Cells[i,2] := aJobs[i].pUserName;
    StringGrid1.Cells[i,3] := aJobs[i].pDocument;
    StringGrid1.Cells[i,4] := aJobs[i].pDatatype;
    StringGrid1.Cells[i,5] := aJobs[i].photoshop/ target=_blank class=infotextkey>pstatus;
    StringGrid1.Cells[i,6] := IntToStr(aJobs[i].Status);
    
    case aJobs[i].Status of
    JOB_STATUS_PAUSED: StringGrid1.Cells[i,6] := 'JOB_STATUS_PAUSED';
    JOB_STATUS_ERROR: StringGrid1.Cells[i,6] := 'JOB_STATUS_ERROR';
    JOB_STATUS_DELETING: StringGrid1.Cells[i,6] := 'JOB_STATUS_DELETING';
    JOB_STATUS_SPOOLING: StringGrid1.Cells[i,6] := 'JOB_STATUS_SPOOLING';
    JOB_STATUS_PRINTING: StringGrid1.Cells[i,6] := 'JOB_STATUS_PRINTING';
    JOB_STATUS_OFFLINE: StringGrid1.Cells[i,6] := 'JOB_STATUS_OFFLINE';
    JOB_STATUS_PAPEROUT: StringGrid1.Cells[i,6] := 'JOB_STATUS_PAPEROUT';
    JOB_STATUS_PRINTED: StringGrid1.Cells[i,6] := 'JOB_STATUS_PRINTED';
    JOB_STATUS_DELETED: StringGrid1.Cells[i,6] := 'JOB_STATUS_DELETED';
    JOB_STATUS_BLOCKED_DEVQ: StringGrid1.Cells[i,6] := 'JOB_STATUS_BLOCKED_DEVQ';
    JOB_STATUS_USER_INTERVENTION: StringGrid1.Cells[i,6] := 'JOB_STATUS_USER_INTERVENTION';
    JOB_STATUS_RESTART: StringGrid1.Cells[i,6] := 'JOB_STATUS_RESTART';
    JOB_POSITION_UNSPECIFIED: StringGrid1.Cells[i,6] := 'JOB_POSITION_UNSPECIFIED';
    
    else StringGrid1.Cells[i,6] := 'Unknown status...';
  end;
end;
delphi编程获取打印机的打印任务列表》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12664.html


关键字:

关于《delphi编程获取打印机的打印任务列表》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td