2008-11-07 6 views
16

मैं सिर्फ विंडोज के बारे में चिंतित हूं, इसलिए मोनो संगतता या उसके जैसा कुछ भी के बारे में एसोटेरिका में जाने की आवश्यकता नहीं है।सी # का उपयोग करके हटाने योग्य डिस्क डालने पर मुझे कैसे पता चलेगा?

मुझे यह भी जोड़ना चाहिए कि मैं जो ऐप लिख रहा हूं वह WPF है, और यदि संभव हो तो मैं System.Windows.Forms पर निर्भरता लेने से बचाना चाहूंगा।

+0

हम एक यूएसबी के बारे में बात कर रहे हैं बंदरगाह? –

+0

एक यूएसबी ड्राइव एक हटाने योग्य डिस्क का एक उदाहरण होगा, लेकिन विंडोज आम तौर पर उन्हें ऑप्टिकल ड्राइव के समान व्यवहार करता है और जैसे घटनाओं की बात आती है। –

उत्तर

16

इस एक शॉट दे दो ...

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Management; 

namespace WMITestConsolApplication 
{ 

    class Program 
    { 

     static void Main(string[] args) 
     { 

      AddInsertUSBHandler(); 
      AddRemoveUSBHandler(); 
      while (true) { 
      } 

     } 

     static ManagementEventWatcher w = null; 

     static void AddRemoveUSBHandler() 
     { 

      WqlEventQuery q; 
      ManagementScope scope = new ManagementScope("root\\CIMV2"); 
      scope.Options.EnablePrivileges = true; 

      try { 

       q = new WqlEventQuery(); 
       q.EventClassName = "__InstanceDeletionEvent"; 
       q.WithinInterval = new TimeSpan(0, 0, 3); 
       q.Condition = "TargetInstance ISA 'Win32_USBControllerdevice'"; 
       w = new ManagementEventWatcher(scope, q); 
       w.EventArrived += USBRemoved; 

       w.Start(); 
      } 
      catch (Exception e) { 


       Console.WriteLine(e.Message); 
       if (w != null) 
       { 
        w.Stop(); 

       } 
      } 

     } 

     static void AddInsertUSBHandler() 
     { 

      WqlEventQuery q; 
      ManagementScope scope = new ManagementScope("root\\CIMV2"); 
      scope.Options.EnablePrivileges = true; 

      try { 

       q = new WqlEventQuery(); 
       q.EventClassName = "__InstanceCreationEvent"; 
       q.WithinInterval = new TimeSpan(0, 0, 3); 
       q.Condition = "TargetInstance ISA 'Win32_USBControllerdevice'"; 
       w = new ManagementEventWatcher(scope, q); 
       w.EventArrived += USBInserted; 

       w.Start(); 
      } 
      catch (Exception e) { 

       Console.WriteLine(e.Message); 
       if (w != null) 
       { 
        w.Stop(); 

       } 
      } 

     } 

     static void USBInserted(object sender, EventArgs e) 
     { 

      Console.WriteLine("A USB device inserted"); 

     } 

     static void USBRemoved(object sender, EventArgs e) 
     { 

      Console.WriteLine("A USB device removed"); 

     } 
    } 

} 
+0

प्रबंधनEventWatcher में कौन सा असेंबली है? –

+0

सिस्टम। प्रबंधन, इस एमएसडीएन लेख के मुताबिक: http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx – ine

+1

ऐसा लगता है कि यह System.Management.dll - http: // में है msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx –

1

सबसे आसान तरीका है एक ऑटोप्ले हैंडलर बनाने के लिए होगा:

http://www.codeproject.com/KB/system/AutoplayDemo.aspx

ऑटोप्ले संस्करण 2, जब Windows XP में एक विशेषता यह है कि एक हटाने योग्य मीडिया की पहली चार स्तर को स्कैन करेगा है यह आता है, मीडिया सामग्री प्रकार (संगीत, ग्राफिक्स, या वीडियो) की तलाश में आता है। सामग्री प्रकार के आधार पर आवेदनों का पंजीकरण किया जाता है। जब हटाने योग्य मीडिया आता है, तो Windows XP निर्धारित करता है कि सामग्री का मूल्यांकन करने और की तुलना में सामग्री के लिए पंजीकृत हैंडलर की तुलना करने के लिए कौन सी कार्रवाइयां निष्पादित करती हैं।

detailed MSDN article भी उपलब्ध है।

+0

यह बहुत अच्छा है, लेकिन मैं वास्तव में कुछ ऐसा ढूंढ रहा हूं जो मेरा सॉफ़्टवेयर चल रहा है। हालांकि धन्यवाद। –

संबंधित मुद्दे