首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PrintQueue.Refresh不显示打印机的状态

PrintQueue.Refresh不显示打印机的状态
EN

Stack Overflow用户
提问于 2018-02-19 16:41:50
回答 1查看 858关注 0票数 0

我需要运行服务器X的Windows服务来显示所有打印机的状态:没有纸张,没有墨粉等等。该服务在机器上运行,但当然不是所有的打印机都安装在机器上。即使打印机安装在机器上,我们也没有打印机的状态!

我唯一能做的就是移除纸张,打印一个测试页(记事本),现在我可以看到我丢失了下面代码的纸张,但正如您可能会想到的那样,这是不可能的:我不想每隔10分钟向网络的每台打印机发送测试页面!

我试图查询PrintQueue.Refresh,但是状态没有更新,我没有看到打印机托盘是打开的(或者丢失了纸张,或者没有墨粉,不管我用打印机做什么)。顺便说一句,Win32_printer没有给我看更好的结果。

注意:

  1. MonitoringWS是可以访问数据库的web服务。
  2. 打印机是我们要查询的打印机列表。

这就是我想要做的。

代码语言:javascript
复制
 var printServers = GetListOfPrinterServers();
            var listPrinters = printers as List<Printer> ?? printers.ToList();
            foreach (
                var printServer in
                    printServers.Select(
                        server => new PrintServer(server, PrintSystemDesiredAccess.EnumerateServer)))
            {
                printServer.Refresh();
                var printQueues = printServer.GetPrintQueues();
                foreach (var printQueue in printQueues)
                {
                    var queue = printQueue;
                    var printersFound = listPrinters.Where(p =>
                                                                                                                                string.Equals(p.PrinterName, queue.FullName,
                                                                             StringComparison.OrdinalIgnoreCase));
                    foreach (var printer in printersFound)
                    {
                        printQueue.Refresh();

                        Debug.WriteLine(string.Format("{0} {1}", printQueue.FullName, printQueue.HostingPrintServer.Name) );
                        var pm = new MonitoringWS.PrinterMonitoring
                                     {
                                         FkPrinter = printer.PkPrinter,
                                         QueueStatus = printQueue.QueueStatus,
                                         DriverName = printQueue.QueueDriver.Name,
                                         MonitoringDateTime = DateTime.Now
                                     };

                        printerMonitorings.Add(pm);
                    }
                }
            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-22 16:36:52

我找到了一种方法: SNMP。我在http://www.snmpsharpnet.com/使用库http://www.snmpsharpnet.com/,并实现RFC 2790:https://www.rfc-editor.org/rfc/rfc2790

这样,当打印机支持该标准时,当SNMP处于活动状态时,我得到了打印机的状态(没有墨粉,没有纸张,没有卡纸等等)。

谢谢大家的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48870516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档