c++ builder中怎么监控打印机状态? - C++ Builder / Windows SDK/API
我是做餐饮方面软件的,所以客人点菜后需要按不同的菜打印至不同的厨房,但是有时候碰到打印机故障,或者打印机缺纸的时候,由于程序不知道,虽然向打印机提交了打印作业,但是没有打印出来,造成了丢单,请问各位大虾有什么方法解决该问题吗?最好能有简单的代码。
[解决办法]
这个好像没法实现。一般这种打印机都比较低级。
[解决办法]
http://support.microsoft.com/kb/q160129/
[解决办法]
/*//从并行端口读取打印机状态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;}