作者:mobiledu2502903717 | 来源:互联网 | 2023-02-05 18:52
在有些情况下,需要获取打印机队列的状态信息,可以通过WindowsAPI函数EnumJobs来获取打印机队列的状态信息。下面例程获取打印机队列的状态信息进行了说明。1)通过菜单Fi
在有些情况下,需要获取打印机队列的状态信息,可以通过Windows API 函数EnumJobs来获取打印机队列的状态信息。下面例程获取打印机队列的状态信息进行了说明。
1) 通过菜单File | New Application 创建一个新的工程。
2) 在窗体Form1中添加一个Button组件和一个Memo组件,进行相关属性的设置。
3) 添加Button1组件的OnClick事件的处理过程如下:
procedure TForm1.Button1Click(Sender: TO b j e c t ) ;
var
LPHandle: THandle; // 打印机句柄
LPStrBuf: Array [0..256] of Char; // 打印机名称
http://www.gaodaima.com/?p=65732获取打印机队列的状态信息_Delphi
NoJobs:Word; // 希望获取的作业数
s:LongWord; // Job_Info 的字节数
Job_Info: array[0..10] of JOB_INFO_1; // 打印队列信息
cbNeeded:Cardinal;
cReturned:Cardinal; // 返回的作业数
ret:LongBool;
I:Integer;
begin
LPStrBuf:=’HP LaserJet III’; // 指定打印机名称
// 打开打印机
if (OpenPrinter(LPStrBuf,LPHandle,nil)=False) then
begin
MessageBox(Form1.Handle,’打开打印机失败。’,’信息’ , MB_OK);
Exit; // 退出
end ;
s:= Sizeof(Job_Info);
cbNeeded:=0;
cReturned:=0;
NoJobs:=10 ;
ret:= EnumJobs(LPHandle,0 ,NoJobs,1,@Job_Info,s,cbNeeded,cReturned);
// 显示打印队列信息
Memo1.Lines.Add(‘共有打印任务:’ +IntToStr(cReturned)+’个’);
for I:=0 to cReturned-1 do
Memo1.Lines.Add( ‘第’ + IntToStr(I+1)+’ 个打印任务有’+IntToStr(Job_Info[I].TotalPages)+’页。’);
end;
4) 编译、链接和运行程序,测试效果。
说明:
· 在进行测试的时候,应根据系统中安装的打印机设置LPStrBuf的数值。
· 可以通过Wi n d o w s 系统中的“控制面板”打开打印机管理器验证运行结果。
欢迎大家阅读《获取打印机队列的状态信息_Delphi》,跪求各位点评,若觉得好的话请收藏本文,by