求windows下打印机状态监控的代码
要写短代码检测打印机的日常状态,比如:卡纸、缺纸报警、无纸等状态的检测。那位大虾有这方面的代码供参考呢。谢谢
[解决办法]
//原来的代码,没有整理,你可以上网搜一下 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 = "打印机缺纸,或脱机";
}
}