【问题标题】:Set "ouf of paper" status for print job from the driver (programmatically)从驱动程序设置打印作业的“缺纸”状态(以编程方式)
【发布时间】:2016-07-08 09:08:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: printing driver jobs printers


    【解决方案1】:

    聚会迟到了,抱歉。我关注标签。无论如何,您可能在这几个月前就解决了,但如果您不将 Position 设置为 JOB_POSITION_UNSPECIFIED,您可能会得到 Access Denied。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多