读书人

c++ builder中如何监控打印机状态

发布时间: 2012-03-23 12:06:21 作者: rapoo

c++ builder中怎么监控打印机状态? - C++ Builder / Windows SDK/API
我是做餐饮方面软件的,所以客人点菜后需要按不同的菜打印至不同的厨房,但是有时候碰到打印机故障,或者打印机缺纸的时候,由于程序不知道,虽然向打印机提交了打印作业,但是没有打印出来,造成了丢单,请问各位大虾有什么方法解决该问题吗?最好能有简单的代码。

[解决办法]
这个好像没法实现。一般这种打印机都比较低级。
[解决办法]
http://support.microsoft.com/kb/q160129/
[解决办法]

探讨
留脚印,等结果
要留多几个,否则太短

[解决办法]
C/C++ code
/*//从并行端口读取打印机状态function GetPrinterStatus:byte;asm  MOV DX,$379;  IN AL,DX;end;//获取打印机是否出错function CheckPrinter:boolean;vartemp: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;*/unsigned char GetPrinterStatus(){    asm    {      MOV DX,0x379    }}bool LptPrint(char prtdata[],int prtlen,int timeout){     HANDLE h;     DWORD n;     COMMTIMEOUTS t;     bool result=true;     h = CreateFile("lpt1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);     if (h == INVALID_HANDLE_VALUE){     //AfxMessageBox("Can not open lpt1");     return false;     }     t.ReadIntervalTimeout = 0;     t.ReadTotalTimeoutMultiplier = 0;     t.ReadTotalTimeoutConstant = 0;     t.WriteTotalTimeoutMultiplier = timeout * 1000 / prtlen;     t.WriteTotalTimeoutConstant = 0;     if (!SetCommTimeouts(h,&t)){     //AfxMessageBox("SetCommTimeout error");     return false;     }     result = true; /*    if (!WriteFile(h,prtdata,prtlen,&n,NULL)){     //AfxMessageBox("Print error");     result = false;     } */     CloseHandle(h);     return result;} 

读书人网 >C++ Builder

热点推荐