求windows下打印机状态监控的代码

woyaoxiazai2012 2010-10-22 10:25:40
要写短代码检测打印机的日常状态,比如:卡纸、缺纸报警、无纸等状态的检测。那位大虾有这方面的代码供参考呢。谢谢
...全文
193 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woyaoxiazai2012 2010-11-01
  • 打赏
  • 举报
回复
郁闷啊。看不懂。
GoAwayZ 2010-10-26
  • 打赏
  • 举报
回复
……看不懂
lghndyz 2010-10-25
  • 打赏
  • 举报
回复
建议看windows程序设计(第五版)这里有电子版的书 http://download.csdn.net/source/2775590
woyaoxiazai2012 2010-10-25
  • 打赏
  • 举报
回复
楼上的,这段代码编译是通过了,可执行下来EnumJobs( hPrinter, 0, 127, 2, (LPBYTE)pJobInfo, dwNeeded, &dwNeeded, &dwReturne )返回true,但dwNeeded, &dwNeeded, &dwReturne 都是0,不知为何缘故啊?打印机我接上了,能正常打印的。而且就算拔掉打印机,结果也是一样。打印机名称没错,改了名称后第一步就错了。
mgsg 2010-10-23
  • 打赏
  • 举报
回复
//原来的代码,没有整理,你可以上网搜一下 EnumJobs
String printpath = "打印机名称";
HANDLE hPrinter;
DWORD dwNeeded, dwReturne;
JOB_INFO_2 * pJobInfo = NULL;



if(!OpenPrinter(printpath.c_str(),&hPrinter,NULL))
{
ShowMessage("打开打印机失败!");
return;
}
//获得需要的内存数量
if(!EnumJobs(hPrinter, 0, 127, 2, NULL, 0, &dwNeeded, &dwReturne))
{
if( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
{
ClosePrinter( hPrinter );
ShowMessage("打开打印机内存数量失败!");
return;
}
}
//分配内存
pJobInfo = (JOB_INFO_2*)GlobalAlloc(GPTR, dwNeeded);
if(!pJobInfo)
{
//分配内存失败
ClosePrinter( hPrinter );
ShowMessage("分配内存失败!") ;

return ;
}
//获得JOB_INFO_2的数组
if( ! EnumJobs( hPrinter, 0, 127, 2, (LPBYTE)pJobInfo, dwNeeded, &dwNeeded, &dwReturne ) )
{
ClosePrinter( hPrinter );
//delete pJobInfo;
GlobalFree((HGLOBAL)pJobInfo);
ShowMessage("获得JOB_INFO_2的数组失败!");
return ;
}
for(j = 0 ; j< dwReturne; j++)
{
if(pJobInfo[j].Status & JOB_STATUS_PAPEROUT ) //
{
Fm->CheckBox1->Checked = true;
Fm->Edt_Ronson->Text = "打印机缺纸,或脱机";

}
else if(pJobInfo[j].Status & JOB_STATUS_OFFLINE ) //
{

Fm->CheckBox1->Checked = true;
Fm->Edt_Ronson->Text = "打印机缺纸,或脱机";

}
}
zzbinfo 2010-10-22
  • 打赏
  • 举报
回复
这个以前有个人问,但是最后估计也没有弄成,你搜以前的帖子看看
woyaoxiazai2012 2010-10-22
  • 打赏
  • 举报
回复
搜不到啊。难度貌似比较大啊。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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