HP Scanner Scanjet 5590 をシステムに接続しています。c#.net経由でスキャナーの状態を知りたいです。どうやってするの?ステータスは次のとおりです。
オン/オフ、アイドル、スキャンなど.
更新:また、WMI を使用してみましたが、検出されません。Win-7 のコントロール パネルでは、スキャナはプリンタの頭の下ではなく、デバイスの頭の下に表示されます。
親切に助けてください。
WMI を使用して、このような情報を取得できます。この投稿を参照してください.NETでプリンター情報を取得する方法? 参考までに。
更新: PnP エンティティを検索してみてください:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_PnPEntity");
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject any in coll)
{
// Check for device name
}
これにより、すべてのデバイスのリストが表示されます。
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 配列は、0 から始まる配列ではなく、必ず 1 からなる配列として扱ってください。そうしないと、COM 例外が発生します。
DeviceInfos[...] 配列でスキャナーが見つかったら、それに接続できます。
DeviceInfo deviceInfo = deviceManager.DeviceInfos[1];
deviceInfo.Connect();
接続したらすぐに操作できます。画像をスキャンしてみましょう。
// Start the scan
var item = deviceInfo.Items[1];
var imageFile = (ImageFile) item.Transfer(FormatID.wiaFormatJPEG);
上記の詳細については、次の場所を参照してください。
WIA API を使用すると、スキャナーがシステムに接続されていて、電源が入っているかどうかを少なくとも検出できます。それはオン/オフの問題を扱います。
WIA を使用して、デバイスのプロパティを照会することもできます。
次のデバイス プロパティに興味があるかもしれません。
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 ヘッダー ファイルを確認してください。
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));
}
}