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.
请教如何得知打印机的确切状态


...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
resound 2003-05-10
  • 打赏
  • 举报
回复
up
Hotthing 2003-05-09
  • 打赏
  • 举报
回复
我也想知道!
FlyOverSea 2003-05-09
  • 打赏
  • 举报
回复
帮你up

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧