下面是程序的源代码 Pinfo:pPRINTERINFO2;
  pprt:Cardinal;
  b:PDWORD;
  a:Integer;
begin
  a:=3000;
  Pinfo:=AllocMem(a);
  b:=AllocMem(1000);  // 打开打印机
  if OpenPrinter('Star AR-3200+',pprt,nil ) then
  begin
    // 得到当前打印机信息
    if GetPrinter(pprt,2,Pinfo,a,b) then
      ShowMessage(Pinfo.pPrinterName+'   Status--'+IntToStr(Pinfo.Status));
  // 关闭打印机
  ClosePrinter(pprt);
  end;
  FreeMem(Pinfo);
  FreeMem(b);
end;为什么我得到的Status值总是0;
在线等待!!!!!!!!!!!

解决方案 »

  1.   

    以下代码可以查看打印机状态,如果打印机有打印任务,显示前20个打印任务.
    可以用在网络或者本地打印机上.//得到本机或者网络上共享打印机的状态
    //author:ginsonic
    //zdcnow download from E-Euse winspool;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,NumJobs:Cardinal;
      I: 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;procedure TForm1.Button1Click(Sender: TObject);
    begin
      //放个memo1来显示状态和打印任务,注意改为你的打印机路径和名称
      GetJobs('Star AR-3200+',Memo1.Lines);
    end;
      

  2.   

    to wkzjl (w.kzjl) :
       你的代码我分析不出原因,不过用上面那个就可以了.有什么问题给我发短信.