在C#中获取新连接的USB设备的COM端口(串口),可以通过使用System.Management命名空间下的ManagementEventWatcher类和WqlEventQuery类来实现。
首先,需要引用System.Management命名空间,并创建一个ManagementEventWatcher对象和一个WqlEventQuery对象。然后,使用WqlEventQuery对象设置查询条件,以便监听USB设备的连接和断开事件。
下面是一个示例代码:
using System;
using System.Management;
public class USBWatcher
{
private ManagementEventWatcher watcher;
public void StartWatching()
{
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3");
watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(USBEventArrived);
watcher.Start();
}
public void StopWatching()
{
if (watcher != null)
{
watcher.Stop();
watcher.Dispose();
}
}
private void USBEventArrived(object sender, EventArrivedEventArgs e)
{
ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
string eventType = (string)e.NewEvent["EventType"];
if (eventType == "2") // USB设备连接事件
{
string deviceName = (string)instance["Name"];
string comPort = GetCOMPort(deviceName);
Console.WriteLine("USB设备已连接:{0},COM端口:{1}", deviceName, comPort);
}
else if (eventType == "3") // USB设备断开事件
{
string deviceName = (string)instance["PreviousInstanceName"];
string comPort = GetCOMPort(deviceName);
Console.WriteLine("USB设备已断开:{0},COM端口:{1}", deviceName, comPort);
}
}
private string GetCOMPort(string deviceName)
{
// 在这里编写获取COM端口的逻辑
// 可以使用System.IO.Ports.SerialPort类来获取已连接的串口设备信息
return "COM1"; // 假设返回COM1端口
}
}
public class Program
{
public static void Main(string[] args)
{
USBWatcher usbWatcher = new USBWatcher();
usbWatcher.StartWatching();
Console.WriteLine("正在监听USB设备连接和断开事件,请按任意键退出...");
Console.ReadKey();
usbWatcher.StopWatching();
}
}
上述代码中,USBWatcher类封装了USB设备的连接和断开事件的监听逻辑。在StartWatching方法中,创建了一个WqlEventQuery对象,并设置查询条件为Win32_DeviceChangeEvent的EventType为2(USB设备连接事件)或3(USB设备断开事件)。然后,通过ManagementEventWatcher对象的EventArrived事件处理程序USBEventArrived来处理事件。在USBEventArrived方法中,可以通过ManagementBaseObject对象获取USB设备的相关信息,如设备名称。然后,可以调用GetCOMPort方法来获取USB设备的COM端口。
需要注意的是,GetCOMPort方法中需要编写获取COM端口的逻辑。可以使用System.IO.Ports.SerialPort类来获取已连接的串口设备信息。具体的实现方式根据实际需求和环境而定。
这是一个基本的实现示例,具体的应用场景和推荐的腾讯云相关产品和产品介绍链接地址需要根据实际情况进行选择和提供。
云+社区沙龙online第6期[开源之道]
云+社区技术沙龙[第6期]
双11音视频
“中小企业”在线学堂
云+社区开发者大会 武汉站
北极星训练营
北极星训练营
新知
小程序·云开发官方直播课(数据库方向)
Techo Hub腾讯开发者技术沙龙城市站
领取专属 10元无门槛券
手把手带您无忧上云