J'ai un très petit code qui montre les ports COM disponibles.
Ma question est:
Existe-t-il un moyen simple d’exécuter le programme dans le tiroir et uniquement dans le menu contextuel lorsqu’un nouveau port COM est disponible et est-il possible d’ajouter le nom du port COM indiqué dans le gestionnaire de périphériques ec "Port série USB"?
J'ajoute/retire souvent un convertisseur USB-> RS232 et le trouve très pénible, car je dois aller dans le gestionnaire de périphériques pour voir à quel port COM il est affecté. Ce n'est pas pareil à chaque fois
Peut-être existe-t-il déjà une petite application capable de le faire mais je ne l'ai pas encore trouvée sur 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)
{
}
}
}
Jetez un oeil à cette question . Il utilise WMI pour trouver les ports COM disponibles. Vous pouvez garder trace des ports COM existants et ne notifier que les nouveaux.
public static void Main()
{
// 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();
}
Pour savoir quand les périphériques sont branchés à chaud, vous souhaitez gérer WM_DEVICECHANGE
. Appelez RegisterDeviceNotification
pour activer la remise de ces notifications.
Le code pour obtenir le numéro COM d'un certain périphérique.
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's 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);