2016-07-07 4 views
0

Я пытаюсь контролировать вставку/удаление USB SD-Card Reader, цель состоит в том, чтобы смотреть установленный каталог..Net WMI <Blah> ChangeEvent для контроля каталогов

код sniplet посмотрел что-то вроде этого, основным отличием является запрос:

mWatcher = new ManagementEventWatcher(); 
mWatcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); 
mWatcher.Query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2 OR EventType = 3"); 
  1. с Win32_DeviceChangeEvent: Я могу контролировать USB штекер/отключить, но когда читатель вставлен не SDCard, событие триггеров, но точка монтирования недействительна. Если я затем вставляю SDCard в считывающее устройство, событие не запускается.
  2. с Win32_VolumeChangeEvent: Событие запускается, когда точка монтирования является буквой диска (например, F:\). Но если точкой монтирования является каталог (что-то вроде C:\usb_reader\) вместо буквы диска, это событие не запускается.

Есть ли событие, которое срабатывает при изменении точки монтирования? , например, когда-то установлен/демонтирована в/из C:\usb_reader ...

ответ

1

Я не думаю, что вам нужно изобретать велосипед, кто-то уже сделал подобный проект: Here

Реализуется это именно то, что Вам необходимо:

{ 
    DriveDetector driveDetector = new DriveDetector(); 
    driveDetector.DeviceArrived += new DriveDetectorEventHandler(OnDriveArrived); 
    driveDetector.DeviceRemoved += new DriveDetectorEventHandler(OnDriveRemoved); 
    driveDetector.QueryRemove += new DriveDetectorEventHandler(OnQueryRemove); 
} 

Вы можете проверить исходный код, если хотите.