我问了这个问题:
Serial Port (rs232) in Mono for multiple platforms
与此相关:
How do I get the friendly name of a COM port in Windows?
但我希望能够在Windows上获得“友好”的名称 - 如果有这样的话,也可能在linux / mac上获得。
有没有跨平台的方式来做,或者我运气不好?
以下是我在当前应用中所做的事情 - 它适用于本机C ++ win32。
http://www.naughter.com/enumser.html
在任何情况下,它看起来都不是跨平台分发的漂亮解决方案。有没有人有任何建议?
编辑 - 因为人们无法理解我的要求: 举个例子 - COM9不是一个友好的名字。我想要一些说“COM9 - USB连接器”之类的东西。这可以通过Win32中的上述链接实现。这是令人讨厌和hacky,但很多时候最终用户不知道他们需要在我的程序中打开什么COM端口,除非有一个有用的名称 - 比“COMn”更有用。
答案 0 :(得分:4)
AFAIK linux中的COMM设备没有“友好”的名称。我建议你做的是在linux环境中使用/ dev / ttyS#作为你的设备名称,并在windows中将它们列为COMM#。
linux用户将理解术语,因此不必担心。
答案 1 :(得分:2)
考虑查看SerialPort.GetPortNames()
静态方法。它在.NET 2.0中可用,看起来它也是在Mono中实现的。根据http://www.go-mono.com/docs/>the mono docs页面,Mono串口对象上存在GetPortNames,所以我试一试。
如果已实现,它应该返回一个包含计算机上可用端口名称的C#字符串数组。这些应该适用于您拥有的任何底层操作系统。例如,在Windows中它将返回COM1,COM2,COM4等。它应该返回PortName
属性所需的字符串。
更新
看一下a post from the mono-dev mailing list它看起来好像在* nix环境下工作。
答案 2 :(得分:0)
在WMI中尝试以下查询:
“从Win32_PnPEntity中选择名称”并搜索包含“COM”的对象,例如,我的计算机上安装了USB-Serial Converter设备:
USB60FPW USB串行转换器(COM6)
答案 3 :(得分:0)
我建立了一个用于串行端口控制的库。它可以从注册表中搜索友好名称。
https://github.com/kcwongjoe/serial_port
std::vector<SerialPortInfo> comPorts = SerialPort::getSerialPortList();
std::cout << comPorts[0].friendlyName << std::endl;
答案 4 :(得分:-2)
你需要研究做WMI。我自己无法运行,但是如果你结合this basic framework如何使用Win32_SerialPort
类this documentation检索WMI对象,我想你可以解决一些问题。
基本上,您希望获得系统上所有Win32_SerialPort
的集合,然后迭代它们。您可能需要“标题”或“描述”,或者只是“名称”。我最好的建议是设置一个断点并在调试模式下检查对象的属性,这样你就可以准确找出填充的内容。
答案 5 :(得分:-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&amp; 0000000&amp; 0&amp; 0?000_0