后台打印作业取消消息或回调通缉(Print spooler job cancellation mes

2019-10-17 13:02发布

背景:
现在我想通过打印GDI打印API ,它看起来是这样的:

StartDoc(hDC,&docinfo)
foreach page in page_buf
    StartPage(hDC)
    /* write the page to printer DC */
    EndPage(hDC)
EndDoc(hDC)

问题:
在打印过程中会出现一个通知区域图标,通过点击它会有显示指定的打印机当前打印作业的小窗口。
通过在打印作业右键单击并选择Cancel ,打印作业将被取消。 但是,直到所有页面都处理我的申请继续将数据发送到打印机DC,状态不断出现Deleting - Spooling完成之前。
我要的是选择取消后立即停止打印过程。

我已经试过:
1.首先我想取消作业后,设备的内容会得到无效的(这当然不是真的),并试图探讨的返回值StartPageEndPage 。 然后我发现他们都没有打印作业取消后会失败。
2.我也试着SetAbortProcDocumentEvent ,发现他们是不是我想要的。


不过,我想应当有某种机制来表明我的应用程序时,取消打印作业。 如果有人试图帮助我们将不胜感激。

Answer 1:

做你想做什么的唯一方式是使用查询打印作业GetJob功能并终止你的循环。 你想要的逻辑是这样的:

JOB_INFO_1 ji;
GetJob(...);
if (ji.Status & (JOB_STATUS_DELETED | JOB_STATUS_DELETING))
   break;


文章来源: Print spooler job cancellation message or callback wanted