我的目标是在驱动程序中实现功能,允许定义是否可以打印新页面。此代码询问打印机是否有足够的纸张来打印当前页面,如果没有,那么它应该设置"缺纸#34;状态(就像它适用于HP打印机)。
为此,我使用DDI钩子(用于起始页)。我在这里做的是:
LPJOB_INFO_1 pJobInfo = NULL;
GetJob(hPrinter, pOemPDEV->JobId, 1, NULL, 0, &dwNeeded);
if ( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
return FALSE;
pJobInfo = (LPJOB_INFO_1) AllocSplMem(dwNeeded);
if (!pJobInfo)
return FALSE;
BOOL getJobRes = GetJob(hPrinter, pOemPDEV->JobId, 1, (LPBYTE)pJobInfo, dwNeeded, &dwNeeded);
if (!getJobRes)
return FALSE;
wsprintf(string, L"pJobInfo->Status %d", pJobInfo->Status);
VERBOSE(string);
pJobInfo->Status |= JOB_STATUS_PAPEROUT;
BOOL a = SetJob(hPrinter, pOemPDEV->JobId, 1, (LPBYTE)pJobInfo, JOB_CONTROL_PAUSE);
结果我有:
问题是如何设置JOB_STATUS_PAPEROUT。提前谢谢。
答案 0 :(得分:3)
晚会,对不起。我按照标记print-spooler-api。无论如何,你可能在几个月前解决了这个问题,但是如果你没有将Position设置为JOB_POSITION_UNSPECIFIED,你可能会被拒绝访问。