| 分類:[.NET 全般]
こんばんわ 政吉と申します。
Visual Studio Community 2015 C# WPFで、Windows10で動作可能なアプリケーションを作成しています。 Windows10のPC上で現在認識しているシリアルポートを取得する方法を、下記のプログラムで実現しています。
int iWrk = 0; string sWrk; string ComPort = "COM3";
// ポート一覧に"USB シリアル デバイス"があるか検索 ManagementClass mcW32SerPort = new ManagementClass("Win32_SerialPort"); foreach (ManagementObject port in mcW32SerPort.GetInstances()) { sWrk = (port.GetPropertyValue("Caption")).ToString(); if (sWrk.IndexOf("USB シリアル デバイス") != -1) { iWrk = 1; ComPort = port.GetPropertyValue("DeviceID").ToString(); } }
if (iWrk == 0) // ポートが無かった場合はエラー { // エラー処理書く } else { serialPort = new SerialPort(ComPort, 115200, Parity.None, 8, StopBits.One); serialPort.Open(); // シリアルポートオープン }
今回、シリアルポートではなく、現在PCに接続されている(PCが認識している)USBコントローラの名前を 上記のシリアルポートのように取得して、特定の名称のUSBコントローラが接続されているかどうかを 調べたいです。 (デバイスマネージャの「ユニバーサルシリアルバスコントローラー」のツリー下層のコントローラ名称 を取得したい)
// USBコントローラの一覧に"STM Device in DFU Mode"があるか検索 ManagementClass mcW32USBDevice = new ManagementClass("Win32_USBControllerDevice"); foreach (ManagementObject USBDevice in mcW32USBDevice.GetInstances()) { sWrk = (USBDevice.GetPropertyValue("Caption")).ToString(); if (sWrk.IndexOf("STM Device in DFU Mode") != -1) { iWrk = 1; } } if (iWrk == 1) // DFU Modeだったらエラー { // エラー処理書く }
と書いてみたのですが、 sWrk = (USBDevice.GetPropertyValue("Caption")).ToString(); の行でエラーとなってしまいます。
どのようにコーディングするのが良いでしょうか? よろしくお願いします。 |