编码实现一个打印机监视器,其中包括两个布尔型域“墨盒用尽”、“最后一次后打印过10
一般打印机都有自带的监控程序,可以在网上查找一下如:
//原来的代码,没有整理,你可以上网搜一下 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 = "打印机缺纸,或脱机";
}
}
什么语言的
可以请店家、售后、厂家服务部指导解决。
要换了墨盒
这个问题有点深奥
当然是可以的
别换墨盒加墨就可以。
太技术性的了
墨盒使用一段时间是需要更换的。更换新的后再试试。