4

私はこの質問をしました:
複数のプラットフォーム用の Mono のシリアル ポート (rs232)

これは関連しています:
WindowsでCOMポートのフレンドリ名を取得するにはどうすればよいですか?

しかし、Windowsで「わかりやすい」名前を取得できるようにしたいと考えています。そのようなことがあれば、Linux / macでも可能です。

それを行うためのクロスプラットフォームの方法はありますか、それとも運が悪いのでしょうか?

これが私の現在のアプリで行っていることです-ネイティブC ++ win32でうまく機能します。

http://www.naughter.com/enumser.html

いずれにせよ、これはクロスプラットフォーム配布の適切なソリューションには見えません。誰か提案はありますか?

編集 - 人々は私が求めていることを理解するのに苦労しているため: 例として - COM9 はフレンドリ名ではありません。「COM9 -​​ USBコネクタ」みたいなのが欲しいです。これは、Win32 の上記のリンクで可能です。これは厄介でハックですが、「COMn」よりも便利な名前がない限り、多くの場合、エンド ユーザーは自分のプログラムでどの COM ポートを開く必要があるかわかりません。

4

6 に答える 6

3

AFAIKには、LinuxのCOMMデバイスに「わかりやすい」名前はありません。Linux環境ではデバイス名として/dev/ ttyS#を使用し、WindowsではCOMM#としてリストすることをお勧めします。

Linuxユーザーは用語を理解するので、心配する必要はありません。

于 2009-01-28T01:33:30.040 に答える
2

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 環境で動作するようです。

于 2009-01-28T17:36:56.773 に答える
0

WMI で次のクエリを試してください。

「Win32_PnPEntity から名前を選択」し、「COM」を含むオブジェクトを検索します。たとえば、コンピュータに USB シリアル コンバータ デバイスがインストールされています。

USB60FPW USB-シリアルコンバータ (COM6)

于 2009-06-03T20:14:30.470 に答える
-2

コード:

    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

于 2009-02-27T17:26:00.343 に答える
-3

WMI の実行を検討する必要があります。私はこれを自分で実行することはできませんでしたが、WMI オブジェクトを取得する方法に関するこの基本的なフレームワークと、このクラスのドキュメントを組み合わせればWin32_SerialPort、何かを解決できると思います。

基本的に、システム上のすべてのWin32_SerialPortのコレクションを取得してから、それらを反復します。「キャプション」、「説明」、または単に「名前」が必要な場合があります。私の最善のアドバイスは、ブレークポイントを設定し、オブジェクトのプロパティをデバッグ モードでチェックすることです。そうすれば、何が入力されるかを正確に把握できます。

于 2009-01-29T21:14:10.353 に答える