首页
学习
活动
专区
工具
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 框架中的 WMI 命名空间

.NET 框架中与 WMI 规范有关的命名空间有两个 , 分别是 System.Management 和 System.Management.Instrumentation 两个命名空间。其中 System.Managemen 命名空间提供的类对象为访问各种管理对象提供了面向对象的编程接口,而 System.Management.Instrumentation 命名空间提供的类用来设置用户自定义的应用程序,使得这些应用程序对象能够符合 WMI 的规范,从而通过 WMI 向使用该应用程序的管理者公开其提供的管理信息和事件,这些使用者有可能是 Microsoft Application Center 或 Microsoft Operations Manager 这样的,也有可能是自定义编写的高端管理应用程序(您可以通过 System.Management 命名空间提供的类对象来编写自己的管理应用程序)。因此,如果您想使自己的产品的管理可以在这些管理工具,您就得使您自己的应用程序符合 WMI 的规范,而针对 .NET 平台上的应用程序 WMI 规范编写来说,使用的是 System.Management.Instrumentation 命名空间提供的类。

04

快速入门 .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

我的WCF之旅(8):WCF中的Session和Instancing Management

我们知道,WCF是MS基于SOA建立的一套在分布式环境中各个相对独立的Application进行Communication的构架。他实现了最新的基于WS-*规范。按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service。对于承载着某个业务功能的实现的Service应该具有Context无关性、甚至是Solution无关性,也就是说个构成Service的operation不应该绑定到具体的调用上下文,对于任何调用,具有什么样的输入,就会有与之对应的输出。因为SOA的一个最大的目标就是尽可能地实现重用,只有具有Context无关性/Solution无关性,Service才能实现最大限度的重用。此外Service的Context无关性/Solution无关性还促进了另一个重要的面向服务的特征的实现:可组合性,把若干相关细粒度的Service封装成一个整体业务流程的Service。

02

Java串口编程:串口数据的发送与监听读取「建议收藏」

本人在近期的开发工作中遇到向串口发送设备控制指令的需求,遂对串口编程进行了略微深入的钻研,在此对自己的一些心得和经验进行总结,以供大家参考与交流。 #串口介绍 #   串口全称为串行接口,一般指COM接口,是采用串行通信方式的扩展接口。其特点是数据位的传送按位顺序进行,最少只需一根传输线即可完成,成本低但传送速度慢。由于串口(COM)不支持热插拔及传输速率较低,目前部分新主板和大部分便携电脑已取消该接口。现在串口多用于工业控制和测量设备以及部分通信设备中。   根据美国电子工业协会(EIA: Electronic Industry Association)制定的标准,串口可以分为RS-232、RS-422以及RS-485等种类,其中以RS-232类型的接口最为典型和常见,本文所使用的是RS-232类型的9针串口(RS-232类型有25接口,但是现在几乎不再使用)。如图 1所示,是RS-232类型9针串口的实物示意图。RS-232类型9针串口每一个引脚的作用说明如图 2所示。

02
领券