C#: получить подробную информацию о принтере
У меня есть принтер Brother RJ-4030, подключенный к кабелю и установленный по умолчанию. и я бегу Windows 7 64 бит и Visual Studio 2013
в основном, я хочу знать как можно больше информации о принтере.
я пробовал 2 метода, первый с использованием Win32_Printer
структура:
private void testPrinterAttrbiutes(params string[] printerAtt)
{
var printerQuerry = new ManagementObjectSearcher("SELECT * FROM Win32_Printer where Default=True");
foreach (var printer in printerQuerry.Get())
{
foreach (var attribute in printerAtt)
{
var result = printer.GetPropertyValue(attribute);
Debug.WriteLine(attribute + " " + result);
}
}
}
и вызывается с такими параметрами: " Status", "ExtendedPrinterStatus", "Availability", "PrinterState", "PrinterStatus", "WorkOffline"
Во втором методе я использовал PrintQueue
класс как так
private void printQuere()
{
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();
defaultPrintQueue.Refresh();
// List<bool> printerStatus = new List<bool>();
System.Collections.Specialized.ListDictionary printerStatus = new System.Collections.Specialized.ListDictionary();
printerStatus.Add("Name", defaultPrintQueue.Name);
printerStatus.Add("IsBusy", defaultPrintQueue.IsBusy);
printerStatus.Add("IsDirect", defaultPrintQueue.IsDirect);
printerStatus.Add("IsInError" , defaultPrintQueue.IsInError);
printerStatus.Add("IsNotAvailable" , defaultPrintQueue.IsNotAvailable);
printerStatus.Add("IsOffline" , defaultPrintQueue.IsOffline);
printerStatus.Add("IsOutOfMemory" ,defaultPrintQueue.IsOutOfMemory);
printerStatus.Add("IsPaused", defaultPrintQueue.IsPaused);
printerStatus.Add("IsPendingDeletion", defaultPrintQueue.IsPendingDeletion);
printerStatus.Add("IsPowerSaveOn", defaultPrintQueue.IsPowerSaveOn);
printerStatus.Add("IsServerUnknown", defaultPrintQueue.IsServerUnknown);
printerStatus.Add("IsShared", defaultPrintQueue.IsShared);
printerStatus.Add("IsWaiting", defaultPrintQueue.IsWaiting);
foreach (System.Collections.DictionaryEntry item in printerStatus)
{
Debug.WriteLine(item.Key + " " + item.Value);
}
}
Я попробовал 4 принтера, заявленных:
(1) подключен кабель питания
(2) кабель питания отключен
(3) кабель питания отключен
(4) отключен кабель питания
Второй метод (с использованием PrintQueue
) дал мне ложь для всех свойств независимо от того, какое состояние из вышеупомянутого было проверено
первый метод (с использованием Win32_Printer
) дал мне этот результат (для всех тестов)
Состояние Неизвестно ExtendedPrinterStatus 2(Неизвестно) Доступность PrinterState 0 PrinterStatus 3 (Idle)
и WorkOffline дал мне false для теста (1) и true для тестов (2)-(4)
Есть ли другой способ получить информацию о принтере?
Я что-то пропустил?
Есть ли способ проверить, поддерживает ли мой принтер отправку сигналов в мою программу?