请问如果得到默认打印机中有多少打印文档

解决方案 »

  1.   

    var mPrintHandle:THandle;                   lRet:LongBool;                      
        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数组存储了打印机的所有任务的信息
      

  2.   

    上面的程序我试过了,会得到Error122,怎么办啊
      

  3.   

    获取打印机的文档状态    
        
    其中主要程序如下: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;