打印假脱机程序作业取消消息或想要的回调

时间:2013-01-04 20:00:13

标签: winapi printing print-spooler-api

背景:
我现在正尝试通过GDI Print 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,发现它们不是我想要的。


但我想在打印作业取消时应该有一些机制来指示我的申请。如果有人试图提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

执行所需操作的唯一方法是使用GetJob function查询打印作业并终止循环。你想要的逻辑是这样的:

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