请问如果得到默认打印机中有多少打印文档
解决方案 »
- wise打包时取得的路径是以\隔开的,怎么把\转换成/
- 当点击Image图片按钮的时候,如何最小化,最小化后如何恢复??
- qreport 要分3列 打印 怎么实现?
- 不知文件的结构情况下,怎么读出内容来
- 为何使用Install Shield 6.2将NT服务打包安装后,无法启动服务?
- 100分求截取程序网络数据包的源码
- 当Access数据文件使用多次后文件会变大,如何用程序压缩?
- zencart开发常识
- 文件读入到一个pointer得缓冲区中,然后调用vc动态库得一个函数,该函数要传入longint得缓冲区地址,怎么实现? 在线等!!!
- 各位用delphi之前用什么开发?为什么要转向delphi?
- 今天接到一封邮件,不知道什么有什么问题?
- 讨论话题::::中间层如何进行业务逻辑的封装?
Job_Info:array[0..99] of _JOB_INFO_2; s:longWord;
cbNeeded:Cardinal;
cReturned:Cardinal;
i:Integer;
//doc_info:_DOC_INFO_1;
sIp:string;
begin
lRet:=OpenPrinter(PChar(PrinterName), mPrintHandle, nil);
If mPrintHandle <> 0 Then
begin
s:=Sizeof(Job_Info);
cbNeeded:=0;
cReturned:=0;
lRet:=EnumJobs(mPrintHandle,0,99,2,@Job_Info,s,cbNeeded,cReturned);
end;
if lRet=false then
begin
showmessage('error'+inttostr(GetlastError));
exit;
end;这个job_info数组存储了打印机的所有任务的信息
其中主要程序如下:typeTMainFrm = class(TForm)Pages: TPageControl;PrinterSht: TTabSheet;PrinterLst: TListBox;...privateprocedure SpollerStatus(var Msg:TWMSpoolerStatus); message WM_SPOOLERSTATUS;...usesWinSpool, ExtCtrls;procedure TMainFrm.SpollerStatus(var Msg:TWMSpoolerStatus);vartbt:Byte;Needed,Returned:DWORD;ResultBuffer:Pointer;i,x,Count:Integer;Pi:PJobInfo1;hPrinter:THandle;List:TListBox;Lbl:TLabel;beginfor i:=1 to Pages.PageCount-1 do beginhPrinter:=Pages.Pages[i].Tag;List:=Pages.Pages[i].Controls[0] as TListBox;Lbl:=((Pages.Pages[i].Controls[1] as TPanel).Controls[0] as TLabel);List.Clear;EnumJobs(hPrinter,0,Msg.JobsLeft,1,@tbt,0,Needed,Returned);if Needed=0 then beginLbl.Caption:='0 个作业';Continue;end;Count:=Needed;if Count<=0 then beginLbl.Caption:='0 个作业';Continue;end;GetMem(ResultBuffer,Count);tryEnumJobs(hPrinter,0,Msg.JobsLeft,1,ResultBuffer,Needed,Needed,Returned);if Returned>Msg.JobsLeft then beginLbl.Caption:='0 个作业';Continue;end;Lbl.Caption:=IntToStr(Returned)+' 个作业';Pi:=ResultBuffer;for x:=0 to Returned-1 do beginList.Items.Add(Pi^.pDocument);Pi:=PJobInfo1(LongInt(Pi)+Sizeof(Pi^));end;finallyFreeMem(ResultBuffer,Count);end;end;Msg.Result:=0;end;procedure TMainFrm.FormCreate(Sender: TObject);vartbt:Byte;Needed,Returned:DWORD;ResultBuffer:Pointer;x,Count:Integer;Pi:PPrinterInfo1;Sheet:TTabSheet;hPrinter:THandle;Panel:TPanel;beginPrinterLst.Clear;EnumPrinters(PRINTER_ENUM_LOCAL,'',1,@tbt,0,Needed,Returned);if Needed=0 then Exit;Count:=Needed;GetMem(ResultBuffer,Count);EnumPrinters(PRINTER_ENUM_LOCAL,'',1,ResultBuffer,Needed,Needed,Returned);Pi:=ResultBuffer;for x:=0 to Returned-1 do beginPrinterLst.Items.Add(Pi^.pName);Pi:=PPrinterInfo1(LongInt(Pi)+Sizeof(Pi^));Sheet:=TTabSheet.Create(Self);with Sheet do beginPageControl:=Pages;Caption:=PrinterLst.Items[PrinterLst.Items.Count-1];OpenPrinter(PChar(Caption),hPrinter,nil);Tag:=hPrinter;ClosePrinter(hPrinter);with TListBox.Create(Self) do beginParent:=Sheet;Align:=alClient;end;Panel:=TPanel.Create(Self);with Panel do beginParent:=Sheet;Align:=alTop;Height:=20;BevelOuter:=bvNone;end;with TLabel.Create(Self) do beginParent:=Panel;Left:=10;Top:=3;Caption:='0 个作业';end;end;end;FreeMem(ResultBuffer,Count);end;procedure TMainFrm.FormDestroy(Sender: TObject);vari,j:Integer;beginfor i:=1 to Pages.PageCount-1 dowith Pages.Pages[i] do begin((Controls[1] as TPanel).Controls[0] as TLabel).Free;for j:=0 to ControlCount-1 doControls[0].Free;Free;end;end;