私のプロジェクトでは、USB に接続されているときに特定のデバイスを検出する必要があります。このデバイスを特定できる唯一の方法は、com ポートではなく、その説明/デバイス名です。正しい機能を実行するために私が見つけたのは、WMI クエリを使用して name プロパティをチェックすることです。
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from WIN32_SerialPort");
foreach (ManagementObject port in searcher.Get())
{
deviceName = (string)foundPort.GetPropertyValue("Name");
...
最初に電話を接続してこれをテストしたところ、クエリは期待どおりに COM3 で見つかった電話を返しました。次に、別のデバイス (このプロジェクトに必要なデバイスによく似た USB からシリアルへのコンバーター) を接続しましたが、クエリは単にそれを見つけられませんでした。電話だけが見つかります。ただし、このデバイスは、デバイス マネージャーのポート COM4 に表示されます。さらに困ったことに、SerialPort クラスは両方のデバイスを検出しますが、デバイスを識別するために必要な情報を提供しません。
string[] tempPorts = SerialPort.GetPortNames();
私は SO や他の場所で多数のスレッドを読みましたが、満足のいく解決策を見つけることができません。WIN32_SerialPort クエリで他のデバイスが見つからない理由を誰かが明確にしてくれませんか? 何らかの理由で win32 シリアル ポートと見なされないのですか? そして、誰かがこの問題の解決策を教えてくれませんか?