使用Windows服务和Vb.Net检测USB驱动器的插入和删除
问题描述:
我想在我的应用程序中检测USB驱动器是插入还是拔出。使用Windows服务和Vb.Net检测USB驱动器的插入和删除
我已经搜索了很多关于它,但实际上找到了很多答案,但没有工作正是我想要它的样子。我发现一个完美的作品,并提供消息时,驱动器插入或插入,但使用WndProc这是一个非常漫长的过程,很难明白我特别是谁对零知识,但这不是主要问题。我在WndProc创建的主要问题是它不能执行一些我想要做的功能,而WMI可以做到这些。我还发现了WMI解决方案,它可以检测驱动器时,驱动器插入但当设备被拔出这是我的计划很重要的是它不能检测。我发现另一个解决方案,似乎工作,但它是在C#代码中,我试图将其转换为VB.Net,但是当我进入该C#代码的第4行代码时未能这样做(我将在后面添加该代码下面)。
链接,帮助我的部分解决方案:
- WndProc - www.vbforfree.com
检测任何驱动器插上电源,完全拔出事件。
- WMI Solution Vb.Net - www.vb-tips.com
完美的作品时,驱动器插好,但如果一个驱动器被拔出无法察觉。
- WMI Solution C# - *.com
,我猜可能工作似乎工作,但未能将其转换为Vb.Net
C#代码:
using System.Management;
ManagementEventWatcher watcher = new ManagementEventWatcher();
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2");
//I am stuck from the line below this
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Query = query;
watcher.Start();
watcher.WaitForNextEvent();
答
我找到了解决办法:)
参考。
- 配置更改(1)
- 设备到达(2)
- 设备删除(3)
- 对接(4)
代码:
Imports System.Management
Imports Microsoft.Win32
Public Class Form1
Dim WithEvents pluggedInWatcher As ManagementEventWatcher
Dim WithEvents pluggedOutWatcher As ManagementEventWatcher
Dim pluggedInQuery As WqlEventQuery
Dim pluggedOutQuery As WqlEventQuery
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
pluggedInQuery = New WqlEventQuery
pluggedInQuery.QueryString = "SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2"
pluggedInWatcher = New ManagementEventWatcher(pluggedInQuery)
pluggedInWatcher.Start()
pluggedOutQuery = New WqlEventQuery
pluggedOutQuery.QueryString = "SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 3"
pluggedOutWatcher = New ManagementEventWatcher(pluggedOutQuery)
pluggedOutWatcher.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub pluggedInWatcher_EventArrived(sender As Object, e As EventArrivedEventArgs) Handles pluggedInWatcher.EventArrived
MsgBox("Plugged In")
End Sub
Private Sub pluggedOutWatcher_EventArrived(sender As Object, e As EventArrivedEventArgs) Handles pluggedOutWatcher.EventArrived
MsgBox("Plugged Out")
End Sub
End Class
我注意到这个问题被张贴在覆盖旧的,理由是你已经自动被禁止的问题上。在这种情况下可以,因为你还没有收到旧问题的答案。但是请注意,总的来说,我们不鼓励这种做法 - 如果您已经收到答案,那么完全修改问题将不公平地使其他人的工作无效,并且您可以预期您的旧问题会被回滚。如果你想问新的堆栈溢出问题,我建议你不要试图解决它,而是让你的问题取消废止。 – halfer
如果你想这样做,[这是关键资源](https://meta.*.com/questions/255583/what-can-i-do-when-getting-we-are-no-longer-接受 - 问题 - 答案 - 从)你需要。 – halfer
谢谢。我从来没有这样做过,但这次我没有办法问,我需要帮助。无论如何,我自己不会编辑这个问题,如果它有任何答案,那看起来完全是无稽之谈。并感谢您指出我的看法。 :) –