2011-11-18 25 views
8

में ड्राइव माउंट इवेंट का पता लगाएं जब कोई नया ड्राइव मेरे कंप्यूटर में जोड़ा जाता है और अधिमानतः और जब किसी ड्राइव के लिए नया माउंट पॉइंट एनटीएफएस ड्राइव पर बनाया जाता है?सी #


मैं इस बाहर figued लेकिन यह घुड़सवार फ़ोल्डरों पर काम नहीं करता:

_eventWatcher = new ManagementEventWatcher("SELECT * FROM Win32_VolumeChangeEvent"); 

_eventWatcher.EventArrived += (o, args) => 
    {switch(args.NewEvent["EventType"].ToString()[0]) 
     { 
      case '2': 
       //mount 
       Debug.WriteLine(args.NewEvent["DriveName"]); 
       break; 
      case '3': 
       //unmount 
       break; 
     } 
    }; 

_eventWatcher.Start(); 

कोई भी विचार?

+0

की संभावित डुप्लिकेट: http://stackoverflow.com/questions/4019065/monitoring-drives- साथ-wmi – aleroot

+1

विंडोज एपीआई के साथ आपको WM_DEVICECHANGE संदेश को संसाधित करना चाहिए। हालांकि, सी # में इसे कैसे संभालना है, यह नहीं पता। –

+0

क्या एनटीएफएस ड्राइव पर घुड़सवार फ़ोल्डरों के लिए ऐसा कुछ है? – user629926

उत्तर

7

आप एक रूप है, तो आप WM_DEVICECHANGE संदेशों को पकड़ने के लिए अपने WndProc विधि ओवरराइड कर सकते हैं के रूप में यूजीन उल्लेख किया:

private const int WM_DEVICECHANGE = 0x219; 

protected override void WndProc(ref Message m) 
{ 
    base.WndProc(m); 

    if (m.Msg == WM_DEVICECHANGE) 
    { 
     // Check m.wParam to see exactly what happened 
    } 
} 
+0

मुझे कुछ समय बाद विंडोज़ सेवा में अपना कोड पोर्ट करने की आवश्यकता होगी, इसलिए यह समाधान काम नहीं करेगा। फिर भी धन्यवाद। – user629926

+0

यदि आप इसे विंडोज सेवा में करना चाहते हैं तो आपको यह जांचना होगा: http://www.codeproject.com/KB/system/Windows_Services.aspx?msg=2900262 –