Как dowski предложил , Вы могли использовать 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);
}
}
Это должно работа.
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
После этого, различное свойства из PrinterSettings могут быть считаны.
Примечание, которое ps.isValid()
видит, существует ли принтер на самом деле.
Редактирование: Один дополнительный комментарий. Microsoft рекомендует, чтобы Вы использовали PrintDocument и изменили его PrinterSettings вместо того, чтобы создать PrinterSettings непосредственно.
Обратите внимание, что статья, на которую ссылались dowski и Panos ( 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 ».
Это было долгое время, так как я работал в среде Windows, но я предложил бы, чтобы Вы посмотрели WMI использования.