Ответ 1
Взгляните на этот вопрос. Он использует WMI для поиска доступных COM-портов. Вы можете отслеживать, какие COM-порты существуют, и только уведомлять о новых.
У меня очень маленький код, который показывает доступные COM-порты.
Мой вопрос:
Есть ли простой способ запустить программу в лотке и только всплывать, когда доступен новый COM-порт, и можно ли добавить имя для COM-порта, который вы можете увидеть в диспетчере устройств? порт "?
Я часто добавляю/удаляю USB- > RS232-преобразователь и обнаруживаю, что это боль в заднице, потому что я должен войти в устройство, чтобы посмотреть, какой COM-порт ему назначен. Это не одно и то же каждый раз
Может быть, есть небольшое приложение, которое может это сделать, но я не нашел его в Google еще
using System;
using System.Windows.Forms;
using System.IO.Ports;
namespace Available_COMports
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//show list of valid com ports
foreach (string s in SerialPort.GetPortNames())
{
listBox1.Items.Add(s);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
Взгляните на этот вопрос. Он использует WMI для поиска доступных COM-портов. Вы можете отслеживать, какие COM-порты существуют, и только уведомлять о новых.
Чтобы узнать, когда устройства горячо подключены, вы хотите обрабатывать WM_DEVICECHANGE
. Вызовите RegisterDeviceNotification
, чтобы включить доставку этих уведомлений.
Код для получения номера COM определенного устройства.
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_PnPEntity");
foreach (ManagementObject queryObj in searcher.Get())
{
devices.Add(new USBDeviceInfo(
(string)queryObj["DeviceID"],
(string)queryObj["PNPDeviceID"],
(string)queryObj["Name"]
));
}
foreach (USBDeviceInfo usbDevice in devices)
{
if (usbDevice.Description != null)
{
if (usbDevice.Description.Contains("NAME OF Device You are Looking for")) //use your own device name
{
int i = usbDevice.Description.IndexOf("COM");
char[] arr = usbDevice.Description.ToCharArray();
str = "COM" + arr[i + 3];
if (arr[i + 4] != ')')
{
str += arr[i + 4];
}
break;
}
}
}
mySerialPort = new SerialPort(str);