WriteFile写并口时如何得到打印机的状态?
niniu 2003-05-09 09:30:20 用WriteFile写并口,发现不论打印机处于什么状态,都不会返回错误
部分程序如下
HANDLE hLiuPrinter=NULL; //打印机句柄
#define PORTERROR (CE_BREAK+CE_DNS+CE_FRAME+CE_IOE+CE_MODE+CE_OOP+CE_OVERRUN+
CE_PTO+CE_RXOVER+CE_RXPARITY+CE_TXFULL)
//取打印机句柄
BOOL LinkPrinter()
{
COMMTIMEOUTS m_CommTimeouts;
if(!bIsWinNT) return TRUE;//is WIN98,NO necessary
hLiuPrinter =
CreateFile("LPT1",
GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,//FILE_FLAG_NO_BUFFERING,
NULL);
if(hLiuPrinter !=INVALID_HANDLE_VALUE)
{
m_CommTimeouts.ReadIntervalTimeout = 10;//读操作两个字
//节之间的时间(单位:毫秒)
m_CommTimeouts.ReadTotalTimeoutMultiplier = 10;//读操作
//的时间(单位:毫秒)
m_CommTimeouts.ReadTotalTimeoutConstant = 10;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 10;
m_CommTimeouts.WriteTotalTimeoutConstant = 10;
SetCommTimeouts(hLiuPrinter, &m_CommTimeouts);
return TRUE;
}
return FALSE;
}
BOOL lprintc_NT(unsigned char data)
{
unsigned char *ptstr;
DWORD t1,dwRead;
COMSTAT t2;
ptstr = &data;
if((!WriteFile(hLiuPrinter,(PBYTE)ptstr,sizeof(BYTE),
&dwRead,NULL)) || (dwRead!=1))
{
ClearCommError(hLiuPrinter,&t1,&t2);
return FALSE;
}
if(!ClearCommError(hLiuPrinter,&t1,&t2))
return FALSE;
if(t1&PORTERROR)
return FALSE;
return TRUE;
}
测试结果是无论打印机处于什么状态WriteFile返回都为TRUE,且dwRead = 1,而且
t1 = 0.
请教如何得知打印机的确切状态