type TForm1 = class(TForm) Label1: TLabel; private { Private declarations } procedure WM_SpoolerStatus(var Msg : TWMSPOOLERSTATUS);message WM_SPOOLERSTATUS; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WM_SpoolerStatus(var Msg : TWMSPOOLERSTATUS); begin //listbox1.items.add(' Jobs currenly in spooler'); Label1.Caption := IntToStr(msg.JobsLeft) + ' Jobs currenly in spooler'; //msg.Result := 0; end; 从网上找到的这段代码,可执行没结果呀? 请问大家有什么好方法呀,可以把打印任务提取出来,而且能选择性的删除打印任务中的某些任务呀??? 问题点数:0、回复次数:12Top 5 楼GoldShield(李柏岑)回复于 2004-10-28 09:21:51 得分 0 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Printers, WinSpool, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); function PrinterStatusText(Status: Integer): String; begin case Status of 0: Result := 'Waiting'; JOB_STATUS_PAUSED: Result := 'Paused'; JOB_STATUS_ERROR: Result := 'Error'; JOB_STATUS_DELETING: Result := 'Deleting'; JOB_STATUS_SPOOLING: Result := 'Spooling'; JOB_STATUS_PRINTING: Result := 'Printing'; JOB_STATUS_OFFLINE: Result := 'Offline'; JOB_STATUS_PAPEROUT: Result := 'Paper Out'; JOB_STATUS_PRINTED: Result := 'Printed'; JOB_STATUS_DELETED: Result := 'Deleted'; JOB_STATUS_BLOCKED_DEVQ: Result := 'Blocked'; JOB_STATUS_USER_INTERVENTION: Result := 'User Intervention'; JOB_STATUS_RESTART: Result := 'Restart'; else Result := 'Status ' + IntToStr(Status); end; end; // procedure GetJobs(PrinterName: String; JobList: TStrings); const InfoLevel = 1; FirstJob = 0; LastJob = 19; var Jobs: array [FirstJob..LastJob] of TJobInfo1; PrinterHandle, BytesNeeded, I, NumJobs:cardinal;// Integer; begin if OpenPrinter(PChar(PrinterName),PrinterHandle,nil) then begin if EnumJobs(PrinterHandle,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeeded,NumJobs) then begin JobList.Clear; for I := 0 to NumJobs-1 do with Jobs[I] do JobList.Add(Format('%s(%s)',[StrPas(pDocument),PrinterStatusText(Status)])); end; ClosePrinter(PrinterHandle); end; end; begin GetJobs('hp deskjet 3500 series',Memo1.Lines); end; end. Top 11 楼ksaiy(阳光总在风雨后)回复于 2004-11-08 04:29:09 得分 0 procedure TForm1.Button6Click(Sender: TObject); var id:string; jobid:Cardinal; ListItem: TListItem; begin if lv.Selected=nil then Exit; id:=lv.Selected.Caption; if id='' then Exit; if MessageDlg('Are you sure you want to delete this Print job?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then exit; jobid:=StrToInt(id); setJob(DevM,Jobid,0,@Jobs,JOB_CONTROL_CANCEL); //ListItem:=lvt.Items.Add; //listItem.Caption:=id; //listItem.SubItems:=lv.Selected.SubItems; ListViewDeleteRow(id,lv); end; procedure TForm1.Button7Click(Sender: TObject); var Dev, Drv, Prt: Array[0..255] of Char; DM1: PDeviceMode; DM2: PDeviceMode; Sz: Integer; begin Printer.PrinterIndex := -1; { 1 Default } Printer.GetPrinter(Dev, Drv, Prt, DevM); If OpenPrinter(Dev,DevM,nil) then Begin //If EnumJobs(DevM,0,10,1,@JI,SizeOf(TJOBINFO1)+128,Need,Return) then Begin If EnumJobs(DevM,0,20,1,@JI,SizeOf(JI),Need,Return) then Begin if Return<0 then exit; //if EnumJobs(DevM,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeeded,NumJobs) then begin showmessage(inttostr(ji[0].JobId)); showmessage(StrPas(Ji[0].pStatus)); If JI[0].JobId>0 then Begin showMessage(Format('正在打印: %s / %d',[StrPas(JI[0].pStatus),JI[0].TotalPages])); End; end else showmessage('bad'); end; end; Top

评论