Wie bekomme ich den "freundlichen" Namen der seriellen Schnittstelle in Mono und halten es cross-Plattform

StackOverflow https://stackoverflow.com/questions/438029

Frage

Ich habe diese Frage:
Serielle Schnittstelle (rs232) in Mono für mehrere Plattformen

und dieses ist verwandt:
Wie bekomme ich den Anzeigenamen eines COM-port in Windows?

Aber ich möchte in der Lage sein, um die "freundlichen" Namen, die auf Windows - und möglicherweise auch auf linux /mac, wenn es so etwas gibt.

Gibt es eine plattformübergreifende Möglichkeit, es zu tun, oder habe ich Pech?

Hier ist, was ich Tue, in meiner aktuellen app - und es funktioniert für native C++ - win32.

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

In jedem Fall ist es nicht Aussehen wie eine hübsche Lösung für cross-Plattform-distribution.Hat jemand irgendwelche Vorschläge?

BEARBEITEN - da Leute sind, die Schwierigkeiten zu verstehen, was ich bin gefragt, für:als ein Beispiel - COM9 ist nicht ein freundlicher name.Ich möchte etwas, das sagt: "COM9 - USB-Anschluss" oder so etwas wie, dass.Dies ist möglich mit dem link oben in Win32.Es ist böse und hacky, aber viele Male, die end-Benutzer haben keine Ahnung, was COM-port Sie öffnen zu müssen, in meinem Programm, es sei denn, es ist eine nützliche name - mehr als nützlich "COMn."

War es hilfreich?

Lösung

AFAIK es gibt keine "freundlichen" Namen für die DFÜ-Geräte in linux.Was ich empfehlen Sie tun, ist die Verwendung der /dev/ttyS#, wie dem Namen Ihres Geräts in einer linux-Umgebung und in der Liste als COMM# in windows.

Die linux-Benutzer wird die Terminologie verstehen, so es sollte nicht eine Sorge gibt.

Andere Tipps

Betrachten Sie bei der SerialPort.GetPortNames() statische Methode.Es ist verfügbar in .NET 2.0, und es sieht aus wie es ist implementiert in Mono-als auch.Nach http://www.go-mono.com/docs/>die mono-docs-Seite, GetPortNames besteht, auf der Mono-serial-port-Objekt, also ich würde give it a shot.

Wenn es implementiert ist, sollte es wieder Sie ein C# - array von strings mit den port-Namen auf Ihrem computer.Diese soll den Sinn für das, was zugrunde liegenden OS Sie haben.Zum Beispiel, in windows werde zurückkehren COM1, COM2, COM4, und so auf.Sollte es wieder der string wird benötigt für die PortName Eigenschaft.

Update:

Nehmen Sie einen Blick auf ein Beitrag aus dem mono-dev-mailing-Liste es sieht aus wie es tut arbeiten unter *nix-Umgebungen.

Versuchen Sie die folgende Abfrage in WMI:

"Select Name From Win32_PnPEntity" und suchen Sie nach Objekten, die "COM", zum Beispiel, ich habe einen USB-Seriell-Konverter-Gerät auf meinem computer installiert:

USB60FPW USB-Seriell-Konverter (COM6)

Sie brauchen, um sich in das tun WMI.Ich habe nicht in der Lage zu laufen, diese selbst, aber wenn Sie Sie kombinieren das Grundgerüst wie zu abrufen eine WMI-Objekt mit diese Dokumentation der Win32_SerialPort Klasse, ich denke, Sie können etwas aus der Arbeit.

Im Grunde, Sie wollen Holen Sie sich eine Sammlung von alle die Win32_SerialPorts auf das system, dann Durchlaufen Sie Sie.Sie möchten die "Beschriftung" oder "Beschreibung", oder vielleicht auch nur "Name".Mein bester Rat ist, setzen Sie einfach einen Haltepunkt und überprüfen Sie die Eigenschaften des Objekts im debug-Modus, so dass Sie herausfinden können, was genau wird aufgefüllt.

Code:

    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;
    }

Verwendung:

        ArrayList ports = GetComFriendlyNames();
        foreach (string name in ports)
        {
            Console.WriteLine(name);
        }

Beispiel-Ausgabe:

COM1 - ACPI\PNP0501\1_0

COM2 - ACPI\PNP0501\2_0

COM3 - FTDIBUSVID_0000+PID_0000+0&0000000&0&0?000_0

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top