我的HP Scanner Scanjet 5590已连接到我的系统。我想通过c#.net了解扫描仪的状态。怎么做?状态是:
开/关, 闲, 扫描, 等。
更新:我也尝试过使用WMI,但它没有检测到它。在Win-7的控制面板中,扫描仪显示在头部设备下方,而不是在头部PRINTERS下面。
请帮助。
答案 0 :(得分:4)
你可以使用WMI来获取这样的信息。请参阅此帖子How to get Printer Info in .NET?作为参考。
<强>更新强> 尝试搜索PnP实体:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_PnPEntity");
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject any in coll)
{
// Check for device name
}
这应该为您提供所有设备的列表。
答案 1 :(得分:2)
您可以尝试使用Windows Image Acquisition(WIA)API。 WIA 2.0随Windows Vista发布,主要针对扫描仪。它仍然支持Windows 7.我使用HP Scanjet 4670扫描仪进行了一段时间的测试。您的扫描仪应与WIA API兼容。
要访问WIA 2.0,您需要添加对COM库“Microsoft Windows Image Acquisition Library v2.0”的引用。
添加参考后,您可以枚举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-bed数组,而不是基于0的数组!如果您不这样做,您将获得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)
使用WIA API,您至少可以检测扫描仪是否已连接到系统并已打开电源。这涉及开/关问题。
您还可以使用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)
{
// ...
}
}
查看Microsoft的WiaDef.h头文件,了解这些设备属性常量的值。
答案 2 :(得分: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));
}
}