设置" ouf of paper"来自驱动程序的打印作业的状态(以编程方式)

时间:2016-07-08 09:08:38

标签: printing driver jobs printers

我的目标是在驱动程序中实现功能,允许定义是否可以打印新页面。此代码询问打印机是否有足够的纸张来打印当前页面,如果没有,那么它应该设置"缺纸#34;状态(就像它适用于HP打印机)。enter image description here

为此,我使用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);

结果我有:

  • SetJob返回FALSE,错误为5(拒绝访问)

  • 状态已更改为"暂停"但是没有出现Out-Of-Paper: enter image description here

问题是如何设置JOB_STATUS_PAPEROUT。提前谢谢。

1 个答案:

答案 0 :(得分:3)

晚会,对不起。我按照标记。无论如何,你可能在几个月前解决了这个问题,但是如果你没有将Position设置为JOB_POSITION_UNSPECIFIED,你可能会被拒绝访问。