Câu trả lời của VitalyB không bao gồm tháo thiết bị. Tôi đã thay đổi nó một chút để kích hoạt sự kiện cả khi phương tiện được chèn và xóa và cũng có mã để lấy ký tự ổ đĩa của phương tiện được chèn.
using System;
using System.Management;
namespace MonitorDrives
{
class Program
{
public enum EventType
{
Inserted = 2,
Removed = 3
}
static void Main(string[] args)
{
ManagementEventWatcher watcher = new ManagementEventWatcher();
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2 or EventType = 3");
watcher.EventArrived += (s, e) =>
{
string driveName = e.NewEvent.Properties["DriveName"].Value.ToString();
EventType eventType = (EventType)(Convert.ToInt16(e.NewEvent.Properties["EventType"].Value));
string eventName = Enum.GetName(typeof(EventType), eventType);
Console.WriteLine("{0}: {1} {2}", DateTime.Now, driveName, eventName);
};
watcher.Query = query;
watcher.Start();
Console.ReadKey();
}
}
}
Nguồn
2016-02-23 21:22:18
Tốt câu hỏi về dịch vụ bẫy sự kiện này. Suy nghĩ đầu tiên của tôi là bạn phải đánh dấu dịch vụ của mình là "cho phép tương tác với máy tính để bàn" và sau đó tạo một cửa sổ ẩn. Tùy chọn an toàn hơn có thể là tạo ứng dụng windows chạy khi khởi động - nó có thể tạo cửa sổ và sau đó liên lạc với svc –
Related: http: // stackoverflow.com/questions/6003822/how-to-detect-a-usb-drive-đã được cắm-in – DuckMaestro