我问这个问题:点击 串行端口(RS-232)在单声道多平台

和这一个相关:结果 如何获得友好在Windows中的COM端口的名称?

不过,我希望能够得到关于Windows的“友好”名称,也可能在Linux / MAC,如果有这样的事情。

有没有跨平台的方式做到这一点,还是我的运气?

下面是我在我的当前应用程序正在做的 - 和它的伟大工程的本地C ++的win32。

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

在任何情况下,它不象跨平台分布的相当溶液。有没有人有什么建议吗?

编辑 - 因为每个人都无法理解什么,我要求: 作为一个例子 - COM9不是一个好记的名称。我想要的东西,说:“COM9 - USB连接器”或类似的东西。这是可能与上述在Win32中的链接。这是肮脏和哈克,但很多时候,最终用户不知道他们需要的,除非有一个有用的名字在我的程序开什么COM端口 - “共同事业”比更有益

有帮助吗?

解决方案

AFAIK存在用于在Linux中COMM设备没有“友好”的名称。我建议你做的是使用在/ dev / TTYS#为您的设备名称在Linux环境中,并列出它们在Windows COMM#。

在linux用户将理解的术语,以便不应该有一个担心那里。

其他提示

考虑在看SerialPort.GetPortNames()静态方法。它在.NET 2.0中可用,而且它看起来像它在Mono的实施也是如此。据http://www.go-mono.com/docs/>the单文档页面,GetPortNames存在单串口对象,所以我给它一个镜头。

如果它的实现,它应该返回您包含端口名称您的计算机上的字符串的C#阵列。这些应该让你感觉有什么底层的操作系统。例如,在Windows中,它会返回COM1,COM2,COM4,等等。它应该返回所需PortName属性的字符串。

更新

以看看从交单-dev邮件列表的,它看起来像它在* nix的环境下正常工作。

尝试以下查询在WMI:

“选择的名字从Win32_PnPEntity”,并搜索包含“COM”对象,例如,我已经安装在计算机上的USB串口转换器装置:

USB60FPW USB串行转换器(COM6)

您需要寻找到做WMI。我一直没能到这个运行自己,但如果结合这个基本框架如何检索与此WMI对象Win32_SerialPort类的文档,我想你可以想些办法。

基本上,你想在系统上的所有Win32_SerialPorts的集合,然后遍历它们。您可能要在“标题”或“说明”,或者只是“名”。我最好的建议是只设置一个断点,并在调试模式下检查对象的属性,以便你能弄清楚到底是什么被填充。

代码:

    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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top