C# 确定(启用USB的)客户显示器的COM端口

C# 确定(启用USB的)客户显示器的COM端口,c#,winforms,C#,Winforms,我已将客户显示与POS应用程序连接。我使用串行端口类在客户显示器上显示消息。我需要知道这个USB显示器使用的com端口。我已经搜索了很多关于获取该计算机所有com端口的示例,但是我能够找到任何帮助来获取特定com端口号,例如COM93、COM01或COM2 我尝试了以下程序,也尝试了Microsoft程序WMI代码创建者 // Get a list of serial port names. string[] ports = SerialPort.GetPortNames(); Console

我已将客户显示与POS应用程序连接。我使用串行端口类在客户显示器上显示消息。我需要知道这个USB显示器使用的com端口。我已经搜索了很多关于获取该计算机所有com端口的示例,但是我能够找到任何帮助来获取特定com端口号,例如COM93、COM01或COM2

我尝试了以下程序,也尝试了Microsoft程序WMI代码创建者

// Get a list of serial port names.
string[] ports = SerialPort.GetPortNames();

Console.WriteLine("The following serial ports were found:");

// Display each port name to the console.
foreach (string port in ports)
{
    Console.WriteLine(port);
}

Console.ReadLine();

SerialPort sp = new SerialPort();
sp.PortName = "COM93";------------- How i can find this no automatic 
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Open();
sp.Write("\f");
sp.WriteLine("***Velkommen***");
sp.Close();
sp.Dispose();
sp = null;
我也尝试过下面的解决方案,为了使用它,我的访问被拒绝,所以我需要编辑注册表,以授予我点wana的权限,我想以编程方式解决这个问题吗

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName");
public string Get_RegistryInfo(string VID, string PID)
        {
            try
            {
                RegistryKey rk1 = Registry.LocalMachine;
                // HKEY_LOCAL_MACHINE
                RegistryKey rk2 = rk1.OpenSubKey("HARDWARE\\\\DEVICEMAP\\\\SERIALCOMM");
                // HKEY_LOCAL_MACHINE\HARDWARE\\\\DEVICEMAP\\\\SERIALCOMM
                VendorID = VID;
                ProduktID = PID;
                string pattern = string.Format("^VID_{0}.PID_{1}", VID, PID);
                Regex _rx = new Regex(pattern, RegexOptions.IgnoreCase);
                string rk2_SubKeyNames = null;
                foreach (string rk2_SubKeyNames_loopVariable in rk2.GetValueNames())
                {
                    rk2_SubKeyNames = rk2_SubKeyNames_loopVariable;
                    if (rk2_SubKeyNames == "\\Device\\ProlificSerial0")
                    {
                        COM_Port = rk2.GetValue(rk2_SubKeyNames).ToString();                        
                    }
                }
                return COM_Port;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
                return COM_Port;
            }

        }