Printing “设置”;“纸的ouf”;驱动程序中打印作业的状态(以编程方式)

Printing “设置”;“纸的ouf”;驱动程序中打印作业的状态(以编程方式),printing,driver,jobs,printers,print-spooler-api,Printing,Driver,Jobs,Printers,Print Spooler Api,我的目标是在驱动程序中实现允许定义是否可以打印新页面的功能。此代码询问打印机是否有足够的纸张打印当前页面,如果没有,则应设置“纸张用完”状态(就像它适用于HP打印机一样) 为此,我使用DDI挂钩(用于起始页)。我在这里做的是: LPJOB_INFO_1 pJobInfo = NULL; GetJob(hPrinter, pOemPDEV->JobId, 1, NULL, 0, &dwNeeded); if ( GetLastError(

我的目标是在驱动程序中实现允许定义是否可以打印新页面的功能。此代码询问打印机是否有足够的纸张打印当前页面,如果没有,则应设置“纸张用完”状态(就像它适用于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);
因此,我有:

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

  • 状态更改为“暂停”,但未出现缺纸:


问题是如何设置工作状态。提前谢谢。

晚会迟到了,对不起。我跟着标签走。无论如何,您可能在几个月前解决了这个问题,但如果不将Position设置为JOB\u Position\u UNSPECIFIED,您可能会被拒绝访问