2014年6月17日火曜日

接続されているキーボードの一覧を表示する

バーコードリーダーを使う仕事で、バーコードリーダーが接続されているか確認する処理を実装するようになった。

この場合、シリアルポート接続で使用するのであれば、COM ポートの一覧を取得してその中から取得したいポートを探せば良い。
この時、SerialPort クラスの GetPortNames() メソッドを使用すれば一覧が取得できる。
しかし、この方法だと接続を外した後に同メソッドを使用しても外された事が取得できない。

こういうときは、WMI を使用すれば良い事が分かった。
既に、実現されている方がおられるので、そちらを参考に

C#でCOMポート番号とシリアル接続機器名を同時に取得する方法
http://truthfullscore.hatenablog.com/entry/2014/01/10/180608

さて、COM ポート接続にした場合はこれで良かったのだが、先方に連絡するとCOMポートではなくキーボード接続として扱うようにと言われた。

デバイスマネージャーで確認すると、HID キーボードデバイスとして認識されていた。
この部分を取得すれば・・・と思ったが、他にキーボード等を接続された場合に判断が付かない。
この内容を伝えると、ひとまず接続確認はしなくて良いとの事になった。

一応、キーボードの一覧を取得する方法も調べたので載せておく。
これもまた WMI を使用すれば取得が可能(詳細の判断も出来るのかしら?)。
今回、Windows フォームアプリでボタンを押したら一覧を表示する内容とした。
参照設定に、「System.Management」を設定する必要がある。

        private void button1_Click(object sender, EventArgs e) {
            ManagementObjectSearcher oMS = new ManagementObjectSearcher();
            ManagementObjectCollection oMC;
            string sMsgStr = "";

            oMS.Query.QueryString = "SELECT * FROM Win32_Keyboard";
            oMC = oMS.Get();

            foreach(ManagementObject oMO in oMC) {
                sMsgStr = sMsgStr + "名前:" + oMO["Description"].ToString() + "\r\n";
            }

            MessageBox.Show(sMsgStr);
        }

WMI は、以下のページを参考にさせて頂いた。

キーボードの種類を取得する: Win32_Keyboard - WMI Sample (VBS)
http://www.wmifun.net/sample/win32_keyboard.htm

0 件のコメント:

コメントを投稿