如何取得pos58打印机的状态。
如:
未开机
缺纸
正在打印
等等。
如何打印图片,设置字体。
这些要全部采用端口打印。。

解决方案 »

  1.   

    GetPrintProcessorDirectory   获取打印机驱动处理器路径 GetPrinter   获取打印机信息 GetPrinterData   获取打印机配置信息 GetPrinterDriver   获取打印机驱动程序信息 GetPrinterDriverDirectory   获取打印机驱动程序路径 ****************************************************************** 
    可用CREATEFILE以PRN为文件名生成一个文件,检测返回值,若成功则打印机可用,否则显示打印机故障。生成关于PRN的文件句柄后,可象普通文件一样向文件写入内容,比如WRITE,写完后关闭文件。 //从并行端口读取打印机状态 function   GetPrinterStatus:byte; asm MOV   DX,$379; IN   AL,DX; end; //获取打印机是否出错 function   CheckPrinter:boolean; var temp:byte; begin temp:=GetPrinterStatus; Result:=not   (   ((temp   and   $80)=0)   //打印机忙 or   ((temp   and   $20) <> 0)   //打印机缺纸 or   ((temp   and   $10)=0)   //打印机未联机 or   ((temp   and   $08)=0)   );   //打印机出错; end; 
      

  2.   

    //以下代码可以查看打印机状态,如果打印机有打印任务,显示前20个打印任务. 
    //可以用在网络或者本地打印机上.....
     //得到本机或者网络上共享打印机的状态 
    //author:ginsonic 
    //zdcnow   download   from   E-E 
    use   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; 
      

  3.   

    不好用,这些都是老掉牙的代码了,只能在win98好用
      

  4.   

    pos58?
    是epson的吗?
    如果是的话,我有他们公司给我在内部使用的pdf文档,不知道值不值钱,从头到尾都标注着内部资料,机密文件
    有需要在话我等下回去帮你找看看还在不在
      

  5.   

    pos58打印机使用标准的ECS/POS指令。并不分什么品牌,用通用的代码控制。