.net - Detect when drive is mounted or changes state (WM_DEVICECHANGE for WPF)? -


i writing directory selector control wpf, , add/remove drive directory tree when gets mounted or unmounted or when becomes ready or not ready (e.g. user inserts or removes cd). looking system event similar wm_devicechange.

konstantin

i used wmi implement (like richard stated in answer)

using system.management;  using system;  ...  private void subscribetocdinsertion() {     wqleventquery q;     managementoperationobserver observer = new managementoperationobserver();      // bind local machine     connectionoptions opt = new connectionoptions();     opt.enableprivileges = true; //sets required privilege     managementscope scope = new managementscope("root\\cimv2", opt);      q = new wqleventquery();     q.eventclassname = "__instancemodificationevent";     q.withininterval = new timespan(0, 0, 1);     // drivetype - 5: cdrom     q.condition = @"targetinstance isa 'win32_logicaldisk' , targetinstance.drivetype = 5";     var w = new managementeventwatcher(scope, q);     try     {         // register async. event handler        w.eventarrived += new eventarrivedeventhandler(driveinsertevent);        w.start();      }     catch (exception e)     {         w.stop();     }  }  void driveinsertevent(object sender, eventarrivedeventargs e) {     // event object , display     propertydata pd = e.newevent.properties["targetinstance"];      if (pd != null)     {         managementbaseobject mbo = pd.value managementbaseobject;         // if cd removed volumename == null         if (mbo.properties["volumename"].value != null)         {             //do         }     } } 

edit: didn't invent code myself, think got here


Comments

Popular posts from this blog

unicode - Are email addresses allowed to contain non-alphanumeric characters? -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

c++ - Convert big endian to little endian when reading from a binary file -