В стандартном диалоговом окне PrintDialog имеется четыре значения, связанные с выбранным принтером: состояние, тип, место и комментарий.Как получить информацию о принтере в .NET?
Если я знаю имя принтера, как я могу получить эти значения в C# 2.0?
В стандартном диалоговом окне PrintDialog имеется четыре значения, связанные с выбранным принтером: состояние, тип, место и комментарий.Как получить информацию о принтере в .NET?
Если я знаю имя принтера, как я могу получить эти значения в C# 2.0?
Как dowski suggested, вы можете использовать WMI для получения свойств принтера. Следующий код отображает все свойства для данного имени принтера. Среди них вы найдете: PrinterStatus, комментарий, местоположение, DriverName, PortName и т.д.
using System.Management;
...
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
try
{
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
}
catch (ManagementException ex)
{
Console.WriteLine(ex.Message);
}
}
Прошло много времени с тех пор, как я работал в среде Windows, но я бы предложил вам посмотреть на using WMI.
PrinterSettings.InstalledPrinters Посмотрите на
Это должны работы.
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
После этого, различные properties из PrinterSettings может быть прочитан.
Обратите внимание, что ps.isValid()
может видеть, действительно ли принтер существует.
Редактировать: Еще один комментарий. Корпорация Майкрософт рекомендует использовать PrintDocument и изменять свои настройки PrinterSettings, а не напрямую создавать настройки PrinterSettings.
Пожалуйста, обратите внимание, что в статье, что dowski и Панос было заявлено (MSDN Win32_Printer) может быть немного вводить в заблуждение.
Я имею в виду первое значение большинства массивов. некоторые начинается с 1, а некоторые начинается с 0. , например, «ExtendedPrinterStatus» первое значение в таблице 1, следовательно, ваш массив должен быть чем-то вроде этого:
string[] arrExtendedPrinterStatus = {
"","Other", "Unknown", "Idle", "Printing", "Warming Up",
"Stopped Printing", "Offline", "Paused", "Error", "Busy",
"Not Available", "Waiting", "Processing", "Initialization",
"Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};
, а с другой стороны, " ErrorState "первое значение в таблице 0, следовательно, ваш массив должен быть чем-то вроде этого:
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
BTW, " PrinterState "устарела, но вы можете использовать "PrinterStatus".
Только для справки, here - это список всех доступных свойств для принтера ManagementObject.
usage: printer.Properties["PropName"].Value
В качестве альтернативы WMI вы можете получить быстрые точные результаты, нажав на WinSpool.drv (т.Windows API) - вы можете получить все детали на интерфейсах, structs & константы из pinvoke.net, или я скомпоновал код в http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html
Я знаю, что это старая публикация, но в настоящее время проще или быстрее заключается в использовании расширенных услуг печати, предлагаемых инфраструктурой WPF (которые могут использоваться приложениями, отличными от WPF).
http://msdn.microsoft.com/en-us/library/System.Printing(v=vs.110).aspx
Пример для получения статуса очереди печати и первая работа ..
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
ур сообщение действительно помогли. но мне нужен адрес ipa и имя порта. как получить IP-адрес и имя порта для выбранного/загруженного принтера ...? – Ashutosh 2012-10-26 08:47:10
есть один плохой способ сделать это, используя выбранный метод ответа, он дает имя сервера для принтера, и если мы пингом это имя, он разрешает ip-адрес и там результат ping может быть проанализирован. Скажите, пожалуйста, если у вас есть лучший способ сделать это – Ashutosh 2012-10-26 11:42:12
Я использую .Net 4.5, недоступно в .Net 4.5 – AmirhosseinYari 2017-07-10 11:55:05