首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用windows服务和c#检测USB驱动器的插入和移除

使用windows服务和c#检测USB驱动器的插入和移除
EN

Stack Overflow用户
提问于 2009-03-06 19:40:51
回答 10查看 95.5K关注 0票数 71

探索构建USB分布式应用程序的可能性

它将在插入U盘时自动启动,并在取出U盘时关闭

将使用.Net和C#。

正在寻找如何使用C#解决此问题的建议?

更新:将其实现为服务的两种可能的解决方案。

  • override WndProc

通过ManagementEventWatcher使用WMI查询

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-06-07 18:08:40

你可以使用WMI,它很简单,而且比使用服务的WndProc解决方案要好得多。

下面是一个简单的例子:

代码语言:javascript
运行
复制
using System.Management;

ManagementEventWatcher watcher = new ManagementEventWatcher();
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2");
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Query = query;
watcher.Start();
watcher.WaitForNextEvent();
票数 72
EN

Stack Overflow用户

发布于 2013-10-18 03:41:13

这对我来说很好用,另外你还可以找到更多关于这个设备的信息。

代码语言:javascript
运行
复制
using System.Management;

private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e)
{
    ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
    foreach (var property in instance.Properties)
    {
        Console.WriteLine(property.Name + " = " + property.Value);
    }
}

private void DeviceRemovedEvent(object sender, EventArrivedEventArgs e)
{
    ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"];
    foreach (var property in instance.Properties)
    {
        Console.WriteLine(property.Name + " = " + property.Value);
    }
}            

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    WqlEventQuery insertQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");

    ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery);
    insertWatcher.EventArrived += new EventArrivedEventHandler(DeviceInsertedEvent);
    insertWatcher.Start();

    WqlEventQuery removeQuery = new WqlEventQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");
    ManagementEventWatcher removeWatcher = new ManagementEventWatcher(removeQuery);
    removeWatcher.EventArrived += new EventArrivedEventHandler(DeviceRemovedEvent);
    removeWatcher.Start();

    // Do something while waiting for events
    System.Threading.Thread.Sleep(20000000);
}
票数 53
EN

Stack Overflow用户

发布于 2012-12-12 02:23:43

添加到VitalyB的帖子中。

要引发插入任何 USB设备的事件,请使用以下命令:

代码语言:javascript
运行
复制
var watcher = new ManagementEventWatcher();
var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Query = query;
watcher.Start();

这将在插入USB设备时引发事件。它甚至可以与National Instruments DAQ一起工作,我正在尝试自动检测它。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/620144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档