打印的有关问题,折磨人呐,跪求指点
打印的问题,折磨人呐,跪求指点~
问题背景:
正常的打印错误提示,如图:
,出现这样的提示表示需要使用的打印机的人介入解决问题,正常情况下点击“确定”的时候打印机会默认问题已经得到处理,并继续打印。点击“取消打印”的时候就是取消打印咯。
通过调用Windows API SetJob可以实现“取消打印“的效果,下面是代码:
好了,问题来了:怎么样才能实现上面提到的点击“确定”的效果?
我试图通过下面的代码来解决,API调用成功,但是并没有解决问题(代码结构不咋的,不要拍我 ~_~ ):
问题背景:
正常的打印错误提示,如图:
通过调用Windows API SetJob可以实现“取消打印“的效果,下面是代码:
// jobId打印机ID,nJobControl 命令类型(有暂停、继续、取消之类的)
// 当nJobControl 等于 JOB_CONTROL_CANCEL 时表示取消打印
BOOL SetJob(DWORD jobId ,int nJobControl)
{
HANDLE hPrinter;
if(!OpenPrinter(_T("HP Deskjet 1000 J110 series"),&hPrinter,NULL))// 取句柄
{
ClosePrinter(hPrinter);
return FALSE;
}
if (!::SetJob( hPrinter , jobId , 0 , NULL , nJobControl ))// 调用API
{
DbgPrint("SetJob Fail ! GetLastError() : %ld \n " , GetLastError());
ClosePrinter(hPrinter);
return FALSE;
}
ClosePrinter(hPrinter);// 关闭打印机
return TRUE;
}
好了,问题来了:怎么样才能实现上面提到的点击“确定”的效果?
我试图通过下面的代码来解决,API调用成功,但是并没有解决问题(代码结构不咋的,不要拍我 ~_~ ):
BOOL SetPrinter()
{
HANDLE hPrinter;
if(!OpenPrinter(_T("HP Deskjet 1000 J110 series"),&hPrinter,NULL))
{
ClosePrinter( hPrinter );
return FALSE;
}
DWORD cByteNeeded, /*nReturned,*/ cByteUsed;
PRINTER_INFO_2 *pPrinterInfo = NULL;
if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))
{
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
ClosePrinter( hPrinter );
return FALSE;
}
}
pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
if (!(pPrinterInfo)) /* Failure to allocate memory. */
{
ClosePrinter( hPrinter );
return FALSE;
}
/* Get the printer information. */
if (!GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,cByteNeeded,&cByteUsed))
{ /* Failure to access the printer. 访问打印机错误*/
free(pPrinterInfo);
pPrinterInfo = NULL;
ClosePrinter( hPrinter );
return FALSE;
}
PRINTER_DEFAULTS *pDefault= NULL;
pDefault = new PRINTER_DEFAULTS;
if ( NULL == pDefault )
{
free(pPrinterInfo);