2012-06-16 1 views
1

У меня есть сканер HP Scanjet 5590, прикрепленный к моей системе. Я хочу знать статус сканера через C# .net. Как это сделать? Статус являются:Как получить статус HP Scanner 5590 Планшет в C# .net?

вкл/выкл, холостых, сканирование, и т.д ..

Update: Кроме того, я попытался с помощью WMI, но не обнаруживает его. В панели управления Win-7 сканер отображается под головкой УСТРОЙСТВА, а не под головкой ПРИНТЕРЫ.

Просьба помочь.

+1

Я думаю, вы уже видели http://stackoverflow.com/questions/296182/how-to-get-printer-info-in-net. Разве это не отвечает на ваш вопрос? – Ando

+0

Проблема заключается в том, что WMI не показывает HP Scanner в качестве устройства. Он отображается на панели управления Win-7, как в разделе «Устройства и сканер» в разделе «Устройства». Когда я запрашиваю через WMI, он не показывает его. – HotTester

ответ

4

u можете использовать WMI для получения такой информации. См. Это сообщение How to get Printer Info in .NET? в качестве справки.

Update: Попробуйте искать PnP лиц:

  ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_PnPEntity"); 
      ManagementObjectCollection coll = searcher.Get(); 

      foreach (ManagementObject any in coll) 
      { 
        // Check for device name 
      } 

Это должно дать вам список всех устройств.

+0

Проблема заключается в том, что WMI не показывает HP Scanner в качестве устройства. Он отображается на панели управления Win-7, как в разделе «Устройства и сканер» в разделе «Устройства». Когда я запрашиваю через WMI, он не показывает его. – HotTester

2

Вы можете попытаться использовать API-интерфейс Windows Image Acquisition (WIA). WIA 2.0 был выпущен в Windows Vista и ориентирован в основном на сканеры. Он по-прежнему поддерживается для Windows 7. Я тестировал его с помощью сканера HP Scanjet 4670 некоторое время назад. Ваш сканер должен быть совместим с API WIA.

Чтобы получить доступ к WIA 2.0, вам необходимо добавить ссылку на библиотеку COM «Библиотека Microsoft Windows Image Acquisition Library v2.0».

enter image description here

После того, как вы добавили ссылку вы можете перечислить совместимые устройства WIA.

var deviceManager = new DeviceManager();  
for (int i = 1; i <= deviceManager.DeviceInfos.Count; i++) 
{ 
    var deviceName = 
     deviceManager.DeviceInfos[i].Properties["Name"].get_Value().ToString(); 

    // Is the device a scanner? 
    if (deviceManager.DeviceInfos[i].Type == WiaDeviceType.ScannerDeviceType) 
    { 
     //...etc. 
    } 
} 

Примечания: Убедитесь, что для лечения массива DeviceInfos как 1-baed массива вместо массива с отсчетом от нуля! Если вы этого не сделаете, вы получите исключения COM.

Когда вы найдете свой сканер в массиве DeviceInfos [...], вы можете подключиться к нему.

DeviceInfo deviceInfo = deviceManager.DeviceInfos[1]; 
deviceInfo.Connect(); 

После подключения вы можете управлять им. Давайте сканируем изображение.

// Start the scan 
var item = deviceInfo.Items[1]; 
var imageFile = (ImageFile) item.Transfer(FormatID.wiaFormatJPEG); 

Вы можете найти более подробную информацию о выше здесь:

Windows Image Acquisition (WIA)

Используя API WIA вы по крайней мере, в состоянии обнаружить, если сканер подключен к системе и включен. Это касается вопроса включения/выключения.

Вы также можете использовать WIA для запроса свойств устройства.

Scanner Device Property Constants

Следующее свойство устройства может заинтересовать:

WIA_DPS_DOCUMENT_HANDLING_STATUS: Содержит текущее состояние установленного планшетного сканера, устройство подачи документов или двусторонней печати (готовый, замятие бумаги, ошибка лампы ... и т.д.).

Запросить WIA_DPS_DOCUMENT_HANDLING_STATUS, чтобы проверить текущий статус сканера.

Например:

class WIA_PROPERTIES 
{ 
    public const uint WIA_RESERVED_FOR_NEW_PROPS = 1024; 
    public const uint WIA_DIP_FIRST = 2; 
    public const uint WIA_DPA_FIRST = WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 
    public const uint WIA_DPC_FIRST = WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 

    // Scanner only device properties 
    public const uint WIA_DPS_FIRST = WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 
    public const uint WIA_DPS_DOCUMENT_HANDLING_STATUS = WIA_DPS_FIRST + 13; 
} 

Property documentHandlingStatus = null; 
foreach (Property property in device.Properties) 
{ 
    string propertyName = property.Name; 
    string propertyValue = property.get_Value().ToString(); 

    if (property.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS) 
    { 
     // ... 
    } 
} 

Checkout заголовочный файл WiaDef.h Microsoft для значений этих констант свойств устройства.

WiaDef.h

0
string printerName = "HP Scanner Scanjet 5590"; 
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
ManagementObjectCollection coll = searcher.Get(); 
foreach (ManagementObject printer in coll) 
{  
    foreach (PropertyData property in printer.Properties)  
    {   
     Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));  
    } 
} 
Смежные вопросы