linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·delphi第三方控件安装(Ehlib)
·DELPHI组件安装全攻略
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·delphi中的Format函数详解
·delphi编程获取打印机的打印任
·如何判断文本文件的编码格式
·深入研究Variant数组
·用delphi编写网络游戏的外挂
·Delphi技巧-用户自定义数据类型
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
delphi编程获取打印机的打印任务列表
[ 作者:  加入时间:2007-11-01 10:36:49  来自:Linux联盟收集整理 ]
如何在程序里判断一个打印作业已经进入打印队列(也就是可以在打印管理程序里看到该作业的信息),或者说如何察看打印队列里已有的作业信息?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论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·用Delphi编程检测打印机状态  (2007-11-01 10:35:56)
 ·使delphi代码简洁的五条忠告  (2007-11-01 10:35:14)
 ·深入理解Delphi的消息机制  (2007-11-01 10:34:17)
 ·delphi开发嵌入式IE浏览器监控程序  (2007-11-01 10:33:29)
 ·delphi创建Photoshop式浮动窗口应用程序  (2007-11-01 10:32:45)
 ·Delphi7 语言手册部分参考  (2007-11-01 10:20:33)
 ·用Delphi改变文件夹图标  (2007-11-01 10:19:57)
 ·delphi轻松设置无边框透明窗体  (2007-11-01 10:19:11)
 ·Delphi实现在数据库中存取图像  (2007-11-01 10:18:23)
 ·DELPHI启动或停止服务  (2007-11-01 10:17:45)