问题标签 [printqueuewatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1059 浏览

c# - 检测正在打印的页面(页面覆盖率)的百分比

在我的一个 Windows 应用程序中,我需要一个模块来检测正在打印的页面的覆盖率。

现在,我正在使用Print Queue Watch库来检测打印作业事件。

但是有没有办法检测打印的页面有多少部分。?

提前致谢。

0 投票
1 回答
887 浏览

c# - 打印队列监控:如何获取启动打印作业的调用者应用程序的信息?

我目前正在编写一个打印监视器应用程序以在打印服务器上运行。请求如下:

当用户在特定应用程序上打印时,需要有关启动打印作业的应用程序的信息。在监视打印机队列时,它会为我提供用户信息和许多其他内容,但无法找到有关启动打印作业的应用程序的信息。

问题是:

是否有 C#/.NET 方法来找出哪个应用程序(例如 winword、excel 等)启动了打印作业?

此信息是否存储在 PrintQueue 或 printspooler 或其他任何地方?如何使用 System.Printing 命名空间或 Win32Api 来完成?

有任何想法吗?

0 投票
1 回答
127 浏览

.net - 我怎么知道 SPL 文件完全写在里面?

我想获取打印机当前的打印作业信息,所以我转到文件夹C:\Windows\System32\spool\PRINTERS并使用以下代码获取假脱机文件信息,

但是,有时我可以正确获取打印作业的颜色类型,有时因为buffer = sr.ReadLine返回了 NULL 对象而不能正确获取,并且我假设我的程序没有完全读取假脱机文件。

此外,我已经尝试过PrintQueueWatch args.PrintJob.Color,但无论我将文档颜色类型更改为“B&W”还是“Color”,它总是返回“true”

在读取假脱机文件或使用 PrintQueueWatch 时我还需要注意什么?先谢谢了~!

0 投票
1 回答
1029 浏览

c# - 从打印作业中获取总页数

我从打印机队列(.NET)中的监视器作业中下载了这段代码, 现在我想知道打印作业的总页数。我看到了评论并添加了以下代码:

但我总是得到错误的页面。我尝试使用“PrinterQueueWatch”,总页数始终为 0。

0 投票
1 回答
98 浏览

c# - PrintQueueWatch .Net 库上的重复 PrintJob.JobID

首先,我在 windows XP、excel 2003、VS 2010、.NET 4.0 上工作,并使用 PrintQueueWatch .Net 库收集每个打印的信息。到目前为止,我所看到的是,当我打印一个包含多个副本的 Excel 活动工作表时,jobdeleted 事件会触发多个。我所期望的是,因为我打印了一个文档,所以会为整个会话创建一个作业 ID,但是对于每个副本都会触发已删除的作业。因此,如果我用 3 个副本打印一页,我至少会得到 3 个作业 ID。真正的问题是现在。当我打印一个页面时,例如在第一个副本之后打印了 3 个副本,另外 2 个副本在 jobdeleted 中获得了两次,所以我得到了 3 个唯一的 PrintJob.jobID,但是 5 次(18、19、19、20、20)。我的问题是为什么在打印会话中多次触发已删除的作业,尤其是为什么在每个副本中。

0 投票
1 回答
222 浏览

c# - 验证 PrintJob 状态(热)

我已经看到这个问题作为这个问题的重复而关闭除非我误解了答案,否则这两个问题对我来说都没有有效的解决方案。

我正在尝试创建 POS 样式打印。我的要求似乎很简单。

  1. 发送到热敏打印机(RawPrinterHelper)
  2. 验证打印作业成功 (?)
  3. 如果失败或队列时间过长,发送到备份打印机。(原始打印机助手)

对于第一点和第三点,我使用了RawPrinterHelper。它工作得很好,但SendStringToPrinter只要安装了打印机,它就会始终返回 true。即使打印机设置不正确,也永远无法完成打印作业。我认为我不能使用 RawPrinterHelper 进行验证。

上面链接的问题使用ManagementObjectSearcherWin32_PrintJob轮询有关打印作业的信息。我还使用了ManagementEventWatcherWin32_PrintJob轮询新的和已删除的打印作业事件。这些解决方案适用于在大多数情况下验证打印作业,但很少使用热敏打印机(不能依赖总页数)。轮询信息以验证打印作业似乎不是最佳选择。我很容易错过信息打印测试页。

由于这些原因,ManagementObjectSearcher 和 ManagementEventWatcher 也不会为我解决问题。

我似乎能找到的唯一可靠的解决方案是由Duncan Edwards Jones 提供的。顺便说一句,如果您遇到此问题,我会从您那里学到很多东西。Duncan 展示了如何使用FindFirstPrinterChangeNotification获取有关作业状态的事件。我已经对此进行了测试,我可以说它可以很好地验证从打印队列中删除打印作业是否已成功打印。

尽管 Duncans 解决方案很棒,但我需要通过它并使其与我的项目兼容 x64,并且可能需要做更多的学习和理解才能将其融入 c#。

使用 FindFirstPrinterChangeNotification 的 Duncans 方法是否仍然是确定打印作业是否成功离开队列的合适方法?

我的一部分感觉我的工作时间太早了,.NET 现在必须有解决这个问题的方法。

更新:最终用户需要在 Windows 中安装打印机并测试页面功能。我不会支持任何 Windows 无法识别的东西。