繁体   English   中英

如何在C#中使用printDocument.print()取消最近的打印?

[英]How do I cancel recent prints with printDocument.print() in C#?

我有一个C#应用程序,可以使用printDocument Class正确打印简单文本。 问题是在调用新的.print()函数之前,我想取消最近的打印作业,删除它们或清除打印队列! 我不知道该怎么办,看来PrintDocument不会将打印作业推入打印机队列! 因为我在那里没有找到任何工作。

感谢您帮助清除“使用printDocumnet.print()创建的近期打印作业”的帮助。

只要您有权利,就应该可以使用WMI

http://sandit27.wordpress.com/2008/05/12/how-to-cancel-printing-in-c/

不久前,我在打印机上做了很多工作,而实现大多数功能的方法是通过PInvoke。

正如@Tsukasa的回答指出,您“可以”使用WMI,但这是另一个噩梦,如果您打算将解决方案实际部署到您自己的计算机之外的其他地方,则很难解决。

正如我提到的那样:我的建议是研究PInvoke。 请记住,自从我从事印刷行业以来,.NET Framework已有多个版本,因此Microsoft可能发布了.NET固有的更优雅,更易于使用的解决方案。

这是MSDN中的后台打印程序功能列表

基本上,如果走这条路线,您要做的是:

  1. 在注册表中找到打印设备的命名句柄。 可以使用.NET框架中可用的注册表类来完成此操作。 Windows打印机的名称将以“#”(或两个)开头,后跟一些乱码的垃圾,然后是GUID。 注册表中所有打印机的安装位置:

    HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows NT \\ CurrentVersion \\ Print \\ Printers

  2. 用打印机名称调用OpenPrinter

  3. 使用从OpenPrinter检索到的句柄调用EnumJobs

  4. 调用SetJob,传递要从EnumJobs中检索到的作业ID,以获取要取消的作业。 确保传递JOB_CONTROL_DELETE标志以取消作业。

  5. 调用ClosePrinter ,传递从OpenPrinter检索到的句柄。 不要忘记这一步。 Windows /后台打印程序会非常怪异。

再强调一次,我很可能没有一种更好,更多.NET的方法来做到这一点。 我建议先在那儿用尽所有选择。

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM