1

HP Scanner Scanjet 5590 をシステムに接続しています。c#.net経由でスキャナーの状態を知りたいです。どうやってするの?ステータスは次のとおりです。

オン/オフ、アイドル、スキャンなど.

更新:また、WMI を使用してみましたが、検出されません。Win-7 のコントロール パネルでは、スキャナはプリンタの頭の下ではなく、デバイスの頭の下に表示されます。

親切に助けてください。

4

3 に答える 3

4

WMI を使用して、このような情報を取得できます。この投稿を参照してください.NETでプリンター情報を取得する方法? 参考までに。

更新: PnP エンティティを検索してみてください:

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

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

これにより、すべてのデバイスのリストが表示されます。

于 2012-06-16T07:35:34.390 に答える
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 配列は、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);

上記の詳細については、次の場所を参照してください。

Windows イメージ取得 (WIA)

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 ヘッダー ファイルを確認してください。

WiaDef.h

于 2012-06-19T07:06:44.577 に答える
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));     
    } 
}
于 2012-06-20T11:42:15.093 に答える