背景:
我正在使用 .NET 4.0 在 C# 中编写应用程序。它以一定的顺序打印一堆文档。这些文档是所有不同类型的,实际上是使用带有“打印”动词的 ShellExecute 打印的。
为确保订单不会混乱,我想检查所涉及打印机的打印队列。我的主循环看起来像:
- 在文档上调用“打印”操作
- 等待文档出现在打印队列中
- 重复直到完成
如何使用托管代码监控打印队列?
我发现了一些使用非托管调用做类似事情的好例子(比如:http: //blogs.msdn.com/b/martijnh/archive/2009/08/05/printmonitor-ac-print-spooler-monitor.aspx)。另外,我知道如何查看 c:\windows\system32\spool... 下的假脱机文件并以这种方式解决问题。
但是,这些解决方案都不是很令人满意......我打电话给大量非托管鳕鱼,我觉得我应该只用 C++ 编写应用程序。(并且没有 .NET 依赖项/开销。)
主要问题:真的没有办法只使用托管调用来监控打印队列吗?
更一般的问题:我来自 java 世界,通常只在我想做一些特定于操作系统的事情或需要与 MS 世界中的其他事物交互的事情时才使用 .NET 语言。(例如 SSIS 组件。)
似乎每次我开始一个项目时,我都会陷入同样的混乱:对本机函数、COM 内容等的各种调用。
第二个问题:关于 .NET 理念或实现,我是否遗漏了什么?(我只是没有足够努力地让托管库做事吗?对于需要执行 Windows 特定操作(例如操作打印队列)的任何事情,.NET 是错误的选择吗?) 我明白(或认为我明白).NET 是理论上应该是独立于操作系统的……但大多数现代操作系统肯定都有打印机和打印队列之类的东西。(因此,如果您对做这些事情有通用调用,它们可以在每个平台的框架版本上实现..)