PrintQueue.Refresh 不显示打印机状态
PrintQueue.Refresh don't show the status of printer
我需要运行一个Windows服务器X的服务来显示所有打印机的状态:缺纸,无碳粉等。
该服务 运行ning 在一台机器上,但当然不是所有的打印机都安装在它上面。即使机器上安装了打印机,我们也没有打印机的状态!
我唯一能做的就是取出纸张,打印测试页(记事本),现在我可以看到我缺少带有下面代码的纸张,但正如您可能认为的那样,这不可行:我不想每 10 分钟左右向网络的每台打印机发送测试页!
我尝试查询 PrintQueue.Refresh 但状态没有更新,我没有看到打印机托盘打开(或缺少纸张,或没有碳粉,无论我对打印机做什么。)
顺便说一句,Win32_printer 没有给我更好的结果。
注意:
- MonitoringWS 是可以访问数据库的网络服务。
- Printers 是我们要查询的打印机列表。
这就是我尝试做的。
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);
}
}
}
我找到了一个方法:SNMP。我在 http://www.snmpsharpnet.com/ and I implement RFC 2790: https://www.rfc-editor.org/rfc/rfc2790 .
使用库 SNMP#
这样,当打印机支持该标准并且 SNMP 处于活动状态时,我得到了打印机的状态(无碳粉、无纸、卡纸等)
感谢大家的帮助。
我需要运行一个Windows服务器X的服务来显示所有打印机的状态:缺纸,无碳粉等。 该服务 运行ning 在一台机器上,但当然不是所有的打印机都安装在它上面。即使机器上安装了打印机,我们也没有打印机的状态!
我唯一能做的就是取出纸张,打印测试页(记事本),现在我可以看到我缺少带有下面代码的纸张,但正如您可能认为的那样,这不可行:我不想每 10 分钟左右向网络的每台打印机发送测试页!
我尝试查询 PrintQueue.Refresh 但状态没有更新,我没有看到打印机托盘打开(或缺少纸张,或没有碳粉,无论我对打印机做什么。) 顺便说一句,Win32_printer 没有给我更好的结果。
注意:
- MonitoringWS 是可以访问数据库的网络服务。
- Printers 是我们要查询的打印机列表。
这就是我尝试做的。
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);
}
}
}
我找到了一个方法:SNMP。我在 http://www.snmpsharpnet.com/ and I implement RFC 2790: https://www.rfc-editor.org/rfc/rfc2790 .
使用库 SNMP#这样,当打印机支持该标准并且 SNMP 处于活动状态时,我得到了打印机的状态(无碳粉、无纸、卡纸等)
感谢大家的帮助。