“フレンドリー” Monoのシリアルポートの名前とそれをクロスプラットフォームに維持する
-
22-07-2019 - |
質問
この質問をしました:
複数プラットフォーム用のMonoのシリアルポート(rs232)
これは関連しています:
どのように友好的になりますかWindowsのCOMポートの名前?
しかし、「フレンドリー」を手に入れたいです。そのようなことがある場合は、Windows上の名前と、おそらくLinux / mac上の名前も。
クロスプラットフォームでそれを行う方法はありますか、それとも運が悪いのですか?
これが現在のアプリで行っていることです-ネイティブC ++ win32に最適です。
http://www.naughter.com/enumser.html
いずれにせよ、それはクロスプラットフォーム配布のためのきれいな解決策のようには見えません。誰か提案はありますか?
編集-人々が私が求めていることを理解するのに苦労しているため: 例として-COM9はフレンドリ名ではありません。 「COM9-USBコネクタ」と書かれたものが欲しいまたはそのようなもの。これは上記のWin32のリンクで可能です。それは厄介でハックですが、多くの場合、エンドユーザーは、「COMn。」よりも便利な名前がなければ、私のプログラムでどのCOMポートを開く必要があるかわかりません。
解決
「友だち」はいませんLinuxのCOMMデバイスの名前。 Linux環境でデバイス名として/ dev / ttyS#を使用し、WindowsでCOMM#としてリストすることをお勧めします。
Linuxユーザーは用語を理解するので、心配する必要はありません。
他のヒント
SerialPort.GetPortNames()
静的メソッドを検討してください。 .NET 2.0で利用可能で、Monoでも実装されているようです。 http://www.go-mono.com/docs/>mono docsページによると、GetPortNamesはMonoシリアルポートオブジェクトに存在するため、試してみます。
実装されている場合、コンピューターで使用可能なポート名を含む文字列のC#配列が返されます。これらは、基盤となるOSに関係なく使用できます。たとえば、Windowsでは、COM1、COM2、COM4などを返します。 PortName
プロパティに必要な文字列を返します。
更新:
からの投稿をご覧くださいmono-devメーリングリストは、* nix環境で機能するようです。
WMIで次のクエリを試してください:
" Win32_PnPEntityから名前を選択" 「COM」を含むオブジェクトを検索します。たとえば、コンピューターにUSB-Serial Converterデバイスがインストールされています:
USB60FPW USBシリアルコンバーター(COM6)
WMIの実行を検討する必要があります。私はこれを自分で実行することはできませんでしたが、この基本的なフレームワークを組み合わせると thisでWMIオブジェクトを取得する方法の Win32_SerialPort
クラスのドキュメント、何か解決できると思います。
基本的に、システム上のすべての Win32_SerialPort
のコレクションを取得し、それらを繰り返し処理します。 「キャプション」、「説明」、または「名前」だけが必要な場合があります。私の最善のアドバイスは、単にブレークポイントを設定し、デバッグモードでオブジェクトのプロパティをチェックすることです。そうすれば、何が読み込まれるかを正確に把握できます。
コード:
public static ArrayList GetComFriendlyNames()
{
ArrayList names = new ArrayList();
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\WMI",
"SELECT InstanceName, PortName FROM MSSerial_PortName");
foreach (ManagementObject port in searcher.Get())
{
names.Add(port["PortName"] + " - " + port["InstanceName"]);
}
}
catch (ManagementException)
{
}
return names;
}
使用法:
ArrayList ports = GetComFriendlyNames();
foreach (string name in ports)
{
Console.WriteLine(name);
}
出力例:
COM1-ACPI \ PNP0501 \ 1_0
COM2-ACPI \ PNP0501 \ 2_0
COM3-FTDIBUSVID_0000 + PID_0000 + 0& 0000000& 0& 0?000_0