您现在的位置:首页 >> 硬件系统 >> 硬件系统 >> 内容

Delphi中获取打印任务状态

时间:2011/9/3 15:19:07 点击:

  核心提示:uses Winspool, Printers; function GetCurrentPrinterHandle: THandle; var Device, Driver, Port: array[...
uses 
  Winspool, Printers; 

function GetCurrentPrinterHandle: THandle; 
var 
  Device, Driver, Port: array[0..255] of Char; 
  hDeviceMode: THandle; 
begin 
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode); 
  if not OpenPrinter(@Device, Result, nil) then 
    RaiseLastWin32Error; 
end; 

function SavePChar(p: PChar): PChar; 
const 
  error: PChar = 'Nil'; 
begin 
  if not Assigned(p) then 
    Result := error 
  else 
    Result := p; 
end; 

//例子
procedure TForm1.Button1Click(Sender: TObject); 
type 
  TJobs  = array [0..1000] of JOB_INFO_1; 
  PJobs = ^TJobs; 
var 
  hPrinter: THandle; 
  bytesNeeded, numJobs, i: Cardinal; 
  pJ: PJobs; 
begin 
  hPrinter := GetCurrentPrinterHandle; 
  try 
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, 
      numJobs); 
    pJ := AllocMem(bytesNeeded); 
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, 
      bytesNeeded, numJobs) then 
      RaiseLastWin32Error; 
    memo1.Clear; 
    if numJobs = 0 then 
      memo1.Lines.Add('No jobs in queue') 
    else 
      for i := 0 to Pred(numJobs) do 
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s', 
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument), 
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)])); 
  finally 
    ClosePrinter(hPrinter); 
  end; 
end;

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号