首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中获取新连接的USB设备的COM端口(串口)

在C#中获取新连接的USB设备的COM端口(串口),可以通过使用System.Management命名空间下的ManagementEventWatcher类和WqlEventQuery类来实现。

首先,需要引用System.Management命名空间,并创建一个ManagementEventWatcher对象和一个WqlEventQuery对象。然后,使用WqlEventQuery对象设置查询条件,以便监听USB设备的连接和断开事件。

下面是一个示例代码:

代码语言:txt
复制
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类来获取已连接的串口设备信息。具体的实现方式根据实际需求和环境而定。

这是一个基本的实现示例,具体的应用场景和推荐的腾讯云相关产品和产品介绍链接地址需要根据实际情况进行选择和提供。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快速入门 .NET nanoFramework 开发 ESP32-Pico 应用

.NET 支持物联网(IoT) 应用的开发,其提供的.NET IoT 库可以让我们在运行 Windwos 和 Linux 系统的 IoT 设备上运行应用,并利用 GPIO、SPI、I2C、PWM 和串行端口等接口使用数百个传感器、显示器、输入设备。但是这并不适用于受约束的嵌入式设备,比如 ESP32、M5Stack、STM32 等。对于这些受约束的嵌入式设备,.NET nanoFramework 提供了一个很好的方案,适用于这些微控制器,能够为受限嵌入式设备编写托管代码。开发者可以利用熟悉的 IDE Visual Studio 和 .NET(C#) 知识快速编写应用程序,而无需担心微控制器的低层硬件复杂性。更方便的是,使用 Visual Studio 可以直接在真实硬件上编写、部署、调试代码。

02
  • C#中的串口通信

    串行接口按电气标准及协议来分,包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。  RS-232-C :也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座。自IBM PC/AT开始使用简化了的9芯D型插座。至今25芯插头座现代应用中已经很少采用。电脑一般有两个串行口:COM1和COM2,9针D形接口通常在计算机后面能看到。现在有很多手机数据线或者物流接收器都采用COM口与计算机相连。

    03

    一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    – 随着移动互联网技术的迅猛发展,两大主流智能移动设备iOS 和Android占据了绝对的市场,除了基本的通话、娱乐功能之外,这些移动设备已经成为新时代中重要的信息终端设备节点。 – 通用串行总线(USB)目前已经成为了最标准的接口,用于提供系统一个可靠且低成本的数字连接,目前在使用方面已经超越了电脑的范畴,并已广泛应用在工业、医疗、消费电子、通信网络等等。 – RS232接口长期广泛存在于在各种应用领域,随着安卓手机平板的大量上市,安卓系统下通过USB转RS232接口接入外设的应用需求也开始变得强烈起来。

    01
    领券