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

如何检测USB断开事件?(Windows,.NET C#应用程序)

要检测USB设备断开事件,您可以使用Windows操作系统的设备管理器API。以下是一个简单的示例,说明如何使用C#编写的.NET应用程序来检测USB设备断开事件。

首先,您需要添加以下命名空间:

代码语言:csharp
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

然后,您可以使用以下代码来检测USB设备断开事件:

代码语言:csharp
复制
public class UsbDeviceNotification
{
    public delegate void UsbDeviceEventHandler(object sender, UsbDeviceEventArgs e);

    public event UsbDeviceEventHandler UsbDeviceDisconnected;

    public void Start()
    {
        // 注册设备接口通知
        RegisterForDeviceNotifications(IntPtr.Zero);
    }

    public void Stop()
    {
        // 注销设备接口通知
        UnregisterDeviceNotifications();
    }

    private IntPtr _deviceNotificationHandle;

    private void RegisterForDeviceNotifications(IntPtr windowHandle)
    {
        var deviceInterfaceClassGuid = new Guid("{A5DCBF10-6530-11D2-901F-00C04FB951ED}"); // 系统设备接口GUID

        var deviceChangeFilter = new DEV_BROADCAST_DEVICEINTERFACE
        {
            dbcc_size = Marshal.SizeOf(typeof(DEV_BROADCAST_DEVICEINTERFACE)),
            dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE,
            dbcc_classguid = deviceInterfaceClassGuid,
        };

        var deviceChangeFilterSize = Marshal.SizeOf(deviceChangeFilter);
        var deviceChangeFilterBuffer = Marshal.AllocHGlobal(deviceChangeFilterSize);
        Marshal.StructureToPtr(deviceChangeFilter, deviceChangeFilterBuffer, true);

        _deviceNotificationHandle = RegisterDeviceNotification(windowHandle, deviceChangeFilterBuffer, DEVICE_NOTIFY_WINDOW_HANDLE);

        Marshal.FreeHGlobal(deviceChangeFilterBuffer);
    }

    private void UnregisterDeviceNotifications()
    {
        if (_deviceNotificationHandle != IntPtr.Zero)
        {
            UnregisterDeviceNotification(_deviceNotificationHandle);
            _deviceNotificationHandle = IntPtr.Zero;
        }
    }

    private void OnUsbDeviceDisconnected(UsbDeviceEventArgs e)
    {
        UsbDeviceDisconnected?.Invoke(this, e);
    }

    private const int DBT_DEVTYP_DEVICEINTERFACE = 0x00000005;
    private const int DEVICE_NOTIFY_WINDOW_HANDLE = 0x00000000;

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr RegisterDeviceNotification(IntPtr recipient, IntPtr notificationFilter, int flags);

    [DllImport("user32.dll")]
    private static extern bool UnregisterDeviceNotification(IntPtr handle);

    [StructLayout(LayoutKind.Sequential)]
    private struct DEV_BROADCAST_DEVICEINTERFACE
    {
        internal int dbcc_size;
        internal int dbcc_devicetype;
        internal int dbcc_reserved;
        internal Guid dbcc_classguid;
        internal short dbcc_name;
    }
}

public class UsbDeviceEventArgs : EventArgs
{
    public string DeviceName { get; set; }
}

要使用此类,请创建一个新的UsbDeviceNotification实例,并订阅UsbDeviceDisconnected事件。当USB设备断开连接时,事件将触发。

代码语言:csharp
复制
var usbDeviceNotification = new UsbDeviceNotification();
usbDeviceNotification.UsbDeviceDisconnected += OnUsbDeviceDisconnected;

usbDeviceNotification.Start();

// 当不再需要检测USB设备断开事件时,调用以下方法
usbDeviceNotification.Stop();

private void OnUsbDeviceDisconnected(object sender, UsbDeviceEventArgs e)
{
    Console.WriteLine($"USB设备已断开连接: {e.DeviceName}");
}

请注意,此示例仅适用于Windows操作系统。如果您需要在其他平台上检测USB设备断开事件,请考虑使用跨平台解决方案,如LibUsbDotNet

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

相关·内容

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页 察看本文应用于的产品 文章编号 : 307710 最后修改 : 2005年3月23日 修订 : 3.1...本文演示了如何为 DataGrid Windows 控件创建简单的分页机制。 本文的代码示例利用了 DataSet 对象。...在 ADO.NET 中,DataSet 对象是通过单次操作填充的并且永驻在内存中。如果您正在使用一个大型 DataSet,本文将为您介绍如何通过编程按块或页显示数据。...SQL Server 7.0 或更高版本 本文假定您熟悉下列主题: • Visual C# .NET • ADO.NET 基础知识和语法 回到顶端 向 DataGrid Windows...打开一个新的 Visual C# .NET Windows 应用程序项目。 2. 添加 DataGrid 控件,将其 ReadOnly 属性设置为 True。 3.

1.5K100

.NET周刊【2月第1期 2024-02-04】

【OpenVINO™】在 Windows 上使用 OpenVINO™ C# API 部署 Yolov8-obb 实现任意方向的目标检测 https://www.cnblogs.com/guojin-blogs...同时,介绍了新书《C#与.NET6 开发从入门到实践》,并分享了如何通过复制开源项目代码来增强TestServer的HttpClient功能。...SignalR Core 的 CPU 使用率过高以及如何处理。 其他主题包括使用事件计数器跟踪指标、部署到生产的结果以及未来的前景。...默认预测调试模式 进程外更新 Web开发 在容器和远程环境中执行单元测试 人工智能助手 其他计划 文章、幻灯片等 如何将 .NET Aspire 应用程序部署到 Azure 容器应用程序 - .NET...Aspire 和独特的事件源框架来创建使用 Cosmos DB 作为数据存储的应用程序的说明。

17510
  • dotnet 从入门到放弃的 500 篇文章合集

    所有博客 .net Framework 源代码 · Ink .net Framework 源代码 · ScrollViewer .net remoting 使用事件 .net remoting 抛出异常...,求距离的点 C# 强转会不会抛出异常 C# 很少人知道的科技 C# 快速释放内存的大数组 C# 搜索算法 C# 获得设备usb信息 C# 转换类型和字符串 C# 遍历枚举 C# 金额转中文大写 C#将...C# 判断文件编码 C# 字符串首字符大写 C# 局部函数与事件 C# 枚举转字符串 C# 相对路径转绝对路径 C# 解析 sln 文件 C# 谁改了我的代码 C# 通配符转正则 C#判断文件属于文本或二进制...C#判断文件是否被混淆 C#同步方法转异步 C#命令行解析工具 C#委托 C#枚举中使用Flags特性 dot net core 使用 IPC 进程通信 dot net core 使用 usb dot...Magick.NET 播放 gif 图片 WPF 如何在 WriteableBitmap 写文字 WPF 如何应用程序调试启动 WPF 如何在绑定失败异常 WPF 如何画出1像素的线 WPF 如何调试

    10.4K20

    C#问题攻克之使用winform调用人脸识别接口

    WinForm简介 lWinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。...C# WinForm 编程需要创建「Windows窗体应用程序」项目。 l.NET 提供了大量 Windows 风格的控件和事件,我们可以直接拿来使用,上手简单,开发快速。...lWindows 窗体应用程序C# 语言中的一个重要应用,也是 C# 语言最常见的应用。这套 C# WinForm 教程将教会大家如何使用 WinForm 开发一个简单的应用。...使用 C# 语言编写的 Windows 应用程序Windows 操作系统的界面类似,每个界面都是由窗体构成的,并且能通过鼠标单击等操作完成相应的功能。...选择C#语言,选择Windows 窗体应用(.NET Framework)。 [ajtek1jbtj.png] 第二步. 把项目名称命名为WinFormDemo,然后单击创建。

    3.2K00

    史上最全Windows安全工具锦集

    下载地址:http://www.exeinfo.xn.pl/ DetectIt Easy 开源的PE侦壳工具,是一个跨平台的应用程序,有Windows、Linux、Mac OS多个可用版本: ?...解决了OD对64位应用程序调试上的缺陷: ? 下载地址:https://x64dbg.com/#start dnSpy 一款针对.NET程序的开源逆向程序的工具。...用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息: ?...下载地址:https://my.comae.com/tools 设备监控 USBLogView 一款USB设备监控软件,后台运行,可以记录插入或拔出系统的任何USB的详情信息: ?...下载地址:https://www.nirsoft.net/utils/usb_log_view.html 集成工具 PC Hunter 一款驱动级的系统维护工具,能够查看各种Windows的各类底层系统信息

    3.3K51

    .NET周报 【6月第4期 2023-06-25】

    会在无操作情况下自动断开连接,导致不美观的重连接界面及灰色效果。我们将使用微软提供的解决方案来处理这个问题。 C#/.Net的多播委托到底是啥?...精细代码覆盖 - Visual Studio Marketplace 【英文】如何使用 Memgraph、C# 和 D3.js 构建基于航班网络分析图的 ASP.NET 应用程序 https://memgraph.../ 了解如何在 ASP.NET Core 应用程序中使用 Microsoft Graph 重置用户密码。...【日文】在 .NET 字符串比较中检测未指定的区域性 https://ufcpp.net/blog/2023/6/ca-specify-culture/ 当未指定区域性时,如何在字符串比较中发出警告/错误...【英文】如何检测堆分配 https://bartwullems.blogspot.com/2023/06/how-to-detect-heap-allocations.html 关于如何检测堆分配。

    29120

    增强用户体验:2个功能强大的.NET控制台应用帮助库

    前言 对于.NET开发者而言,构建控制台应用程序时,如何提升用户交互的流畅性和满意度,是一个持续探索与优化的话题。...Terminal.Gui Terminal.Gui是一个跨平台(Windows、Mac 和 Linux/Unix )、开源(遵循 MIT License)、免费的用于为.NET、.NET Core 和...Spectre.Console Spectre.Console是一个.NET开源且免费的类库帮你轻松的创建漂亮、美观的.NET控制台应用程序。...该库将检测当前终端的功能,并根据需要降低颜色。...优秀项目和框架精选 以上项目都已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量

    9910

    Xamarin 学习笔记 - 配置环境(Windows & iOS)

    背景介绍 一直以来,做为一名Web以及桌面开发人员,我一直在使用.NET框架和C#语言,而在某些项目中,Angular会在前端占有主导地位。...自此微软生成用C#开发的软件将不仅仅能够运行在Windows上,而是可以在任何设备上运行。...Xamarin使得你可以使用C#创建原生的应用。 在文章的另一部分,我将从定义硬件和软件需求开始入手,即便是你没有任何的移动端开发经验,也能够开始了解如何开始构建一个移动应用。...通过将你的设备与IDE配对,我们可以在设备上直接部署,测试和调试应用程序。 那么,我们如何使用它? 这很简单,我们可以从你的设备中选择一个新的目标开始使用这一功能。 ? ?...伴随着崩溃,我们需要了解一些分析以了解更多客户,因此,从应用中心,我们可以记录自定义事件。 最后,它是推送通知的单一来源。

    6.2K20

    你不知道的数据库连接池

    ADO.NET 会同时保留多个池,每种配置各有一个。 在使用集成的安全性时,连接按照连接字符串以及 Windows 标识分到多个池中。 还根据连接是否已在事务中登记来建立池连接。...池连接可以显著提高应用程序的性能和可缩放性。 默认情况下,在 ADO.NET 中启用连接池。 除非显式禁用,否则,在应用程序中打开和关闭连接时,池进程会对连接进行优化。...移除连接 连接池在空闲约4-8分钟后,或者如果连接池检测到与服务器的连接已被切断,连接池将从池中删除连接。注意,只有在尝试与服务器通信之后才能检测断开的连接。...如果存在到已消失的服务器的连接,则可以从池中提取该连接,即使连接池程序没有检测断开的连接并将其标记为无效。...当发生这种情况时,第一次尝试使用连接将检测到连接已被切断,并引发异常。 清除池 ADO.NET 2.0 引入了两种新的方法来清除ClearAllPools池ClearPool:和。

    1K10

    【翻译】.NET Framework 4.5新特性

    开发者预览版.net 4.5 .NET for Metro style apps Metro风格的应用程序是利用Windows操作系统的强大功能设计的特殊表单元素。...一个称之为.NET APIs for Metro style apps的.Net的一个子集用来支持Metro风格的应用程序, 可以使用C#或Visual Basic来编写Metro风格的应用程序。...(你可以不必使用类特性来创建部件,现在可以按命名约定来创建你的部件) -多作用域 异步文件操作 在.NET框架4.5开发者预览版中, 基于任务模型的异步操作特性被添加到C#和Visual Basic语言...Windows Presentation Foundation (WPF) 在.NET框架4.5开发人员预览版中,Windows Presentation Foundation(WPF)包含以下几个方面的变化和改进...-可以检查容器的数据上下文是否断开链接。 -可以设置属性、数据源改变的超时时间 -实施弱事件模式的改进支持。此外,事件现在可以接受的扩展标记。

    86820

    在C#.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)

    文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载 (1) 在C#/.NET应用程序开发中创建一个基于...Topshelf的应用程序守护进程(服务) (2) C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案 (3) 前言 在上一篇文章...《C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载》中,我们了解发C#/.NET创建基于Topshelf Windows服务程序的大致流程,参数配置以及服务的安装和卸载。...本文主要演示在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)。...应该如何解决呢??? 预知后事如何请听下回分解(未完待续)... 好了,今天的在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)的分享就到这里。

    2.1K20

    .NET周报【12月第1期 2022-12-08】

    这篇文章涵盖了这个版本中的以下主题 性能改进 支持.NET 7 SDK 支持 WSL2 UX/UI 的改进 对接工具窗口 新的主工具条 最新的 C#特性 网站开发更新 游戏开发更新 NuGet 支持 中央软件包管理和漏洞版本检测...这篇文章涵盖了这个版本中的以下主题 C#支持 C# 11 的特点 语言注入 全球进口水沟标志 漏洞版本的依赖检测 支持 ARM64 上的 Visual Studio 动态程序分析的数据库检查 支持 C+...这个版本包括对 C# 11 必要成员的支持,对 Roslyn 模式检测的更新,以及其他错误和改进。 文章、幻灯片等。...如何在没有 Mac 的情况下只用 Windows 调试 iOS 应用程序(.NET MAUI) - Qiita https://qiita.com/MAUIHighSchool/items/1ffcfa508342fc250757...关于如何Windows 上直接从 Visual Studio 部署和调试 iOS 应用程序的文章。

    4.6K20

    .NET周刊【6月第2期 2024-06-09】

    该库基于Blazor框架,旨在帮助开发人员构建现代化的Web应用程序。Blazor使用.NET框架和C#,允许开发者以C#编写单页应用和Web服务。文中还提供了项目源代码和在线文档链接。...记一次 .NET某质量检测中心系统 崩溃分析 https://www.cnblogs.com/huangxincheng/p/18230369 本文讨论了一个.NET程序在Windows操作系统上因栈溢出导致...主要技术点在于C#编程实现的出牌合法性检测,包括手牌检测、牌型判断和竞赛逻辑。提供了核心代码段展示出牌类型的检测和玩牌的主要逻辑。...通过这些最佳实践,该系列文章旨在帮助开发者提高.NET应用程序的内存使用效率,提高性能。...-8-1ag 了解如何读写 Windows 权利管理器。

    11310

    .NET周刊【9月第4期 2023-09-24】

    C#集成ViewFaceCore人脸检测识别库 https://www.cnblogs.com/deali/p/17716884.html 本文介绍了在C#上使用ViewFaceCore库进行人脸检测和识别的过程...ViewFaceCore是基于SeetaFace6的.NET人脸识别解决方案,支持年龄预测、眼睛状态检测、性别预测、人脸检测、口罩检测等功能。...在C#中使用非常简单,但由于调用了C++的库,部署时可能会遇到一些问题。文章详细记录了如何添加依赖、进行人脸检测、使用ImageSharp图片库等步骤,并提供了相关代码示例。...如何在.NET电子表格应用程序中创建流程图 https://www.cnblogs.com/powertoolsteam/p/17711691.html 本文介绍了如何在.NET WinForms应用程序中创建流程图...流程图是一种图形化工具,用于展示过程中的事件、决策和操作的顺序和关系。

    20340

    ☀️ 学会编程入门必备 C# 最基础知识介绍(一)

    组件版本(Assembly Versioning) 属性(Properties)和事件(Events) 委托(Delegates)和事件管理(Events Management) 易于使用的泛型(Generics...我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。....Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序Windows 应用程序 Web 应用程序 Web 服务 .Net 框架应用程序是多平台的应用程序。...Forms) ASP.Net 和 ASP.Net AJAX ADO.Net Windows 工作流基础(Windows Workflow Foundation - WF) Windows 显示基础(Windows...C# 有用的网站 C# Programming Guide - 介绍了有关关键的 C# 语言特征以及如何通过 .NET 框架访问 C# 的详细信息。

    1K50

    C#.NET.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...

    原文由Rector首发于 码友网 之 《C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskScheduler,Gofer.NET...那么,对于C#/.NET开发人员来说,如何实现定时任务,实现定时任务又有哪些方法或者有哪些组件呢?这些问题对于从事C#/.NET的开发者,特别是刚入行不久或者经验欠缺者来说将会是比较困扰的问题。...今天Rector就收集整理一些C#/.NET/.NET Core应用程序编程开发中常用的实现定时任务调度的方法或者定时任务调度组件。...提供动作编辑器,触发器编辑器,事件查看器,任务执行历史查看器等对话框 Gofer.NET Gofer.NET是支持分布式的任务/作业调度组件,可以运行在.NET Core应用程序中。...MVC(C#)和Quartz.Net组件实现的定时执行任务调度》 Hangfire Hangfire是一个支持.NET和.NET Core应用程序的跨平台的后台作业处理框架,使用Hangfire时不再需要

    2.9K20
    领券