|
分類:[.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();
の行でエラーとなってしまいます。
どのようにコーディングするのが良いでしょうか?
よろしくお願いします。
|