C# 过滤SerialPort端口

C#中的SerialPort类只能通过SerialPort.GetPortNames()来获取端口名字,而且出来都是COM+数字的字样,如果我要识别COM端口是什么设备的,它就无能为力了,此时我们可以使用ManagementObjectSearcher获取所有COM&LPT的port,然后根据名字或者description来识别端口:

 

try
            {
                //{4d36e978-e325-11ce-bfc1-08002be10318}为设备类别port(端口(COM&LPT))的GUID
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(
                                                        "root\\CIMV2",
                    "SELECT * FROM Win32_PnPEntity WHERE ClassGuid=\"{4d36e978-e325-11ce-bfc1-08002be10318}\""
                                                        );
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    string name = queryObj.GetPropertyValue("Name").ToString();
                    string desc = queryObj.GetPropertyValue("Description").ToString();
                   
                }
            }
            catch (Exception ex)
            {
                //Log.w
            }

如果事先知道某类port的名字特征,如知道Description为“abc”,就可以把ManagementObjectSearcher的第二个参数改为:

            try
            {
                //{4d36e978-e325-11ce-bfc1-08002be10318}为设备类别port(端口(COM&LPT))的GUID
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(
                                                        "root\\CIMV2",
                                                        "SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%abc%'"
                                                        );
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    string name = queryObj.GetPropertyValue("Name").ToString();
                    string desc = queryObj.GetPropertyValue("Description").ToString();
                }
            }
            catch (Exception ex)
            {
                //Log.w
            }

这样就不需要过滤了。

 

google了半天,有用win32_serialport的,但是不知道问为啥,有些端口识别不出来。

 

posted @ 2016-04-12 19:00  mrhyher  阅读(1990)  评论(2编辑  收藏  举报