小编use*_*724的帖子

不使用互操作/非托管代码监视打印假脱机

背景:

我正在使用.NET 4.0在C#中编写应用程序.它按特定顺序打印一堆文档.这些文档具有所有不同的类型,实际上是使用带有"print"动词的ShellExecute打印的.

为了确保订单不会混乱,我想检查所涉及的打印机的打印队列.我的主循环看起来像:

  1. 在文档上调用"打印"操作
  2. 等待文档显示在打印队列中
  3. 重复直到完成

如何使用托管代码监控打印队列?

我找到了一些使用非托管调用做类似事情的好例子(例如: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是从理论上讲,它应该与操作系统无关.但是大多数现代操作系统肯定都有打印机和打印队列等等.(所以如果你有做这些事情的泛型调用,它们可以在每个平台的框架版本上实现..)

.net c# printing winapi spooler

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

printing ×1

spooler ×1

winapi ×1