दिलचस्प पोस्ट
उत्तरदायी क्षैतिज पृष्ठ फिसलने फ़ॉर्म लोड अपवाद क्यों नहीं पकड़े? Wildfly 9 http को https ग्रहण के बाद मैं हमेशा एपीपी फाइल को फिर से स्थापित कर सकता हूं उपलब्ध JSR-223 स्क्रिप्टिंग भाषाओं की सूची मुझे कहां मिल सकती है? Python में nosetest / unittest के साथ आउटपुट कैसे लागू होगा? एस सीएसएस फ़ाइल में नियमित सीएसएस फ़ाइल आयात करें? कई कोशिकाओं के साथ पीडीएफपी की मेमोरी खपत को कैसे कम करना रीयलटाइम में एक पाठ फ़ाइल की निगरानी कैसे करें सॉर्ट किए गए मैट्रिक्स पर चयन एल्गोरिदम फ़ॉर्म के बीच डेटा पास करना दिन पर डेटा को संभालना जब हम डेलाइट बचत समय पर स्विच करते हैं और आर में वापस जाते हैं एक टुकड़ा में Google Maps API V2 जोड़ें jQuery मान्य: नियमित अभिव्यक्ति सत्यापन के लिए एक नियम कैसे जोड़ें? एकल स्रोत कोड से अनेक एंड्रॉइड एप्लिकेशन पैकेज। एपीक फाइलें

यूएसबी ड्राइव सम्मिलन और खिड़कियों सेवा का उपयोग हटाने और सी # का पता लगाने

एक यूएसबी वितरित आवेदन बनाने की संभावना को देखते हुए
जो छड़ी को हटाते समय एक यूएसबी स्टिक और शटडाउन को सम्मिलित करने पर पुनः आरंभ होगा

नेट और सी # का उपयोग करेगा।
सुझाव है कि कैसे इस दृष्टिकोण सी # का उपयोग करने के लिए?


अद्यतन: दो संभव समाधान एक सेवा के रूप में इसे लागू।
– WndProc ओवरराइड
या
– ManagementEventWatcher के साथ WMI क्वेरी का उपयोग करना

Solutions Collecting From Web of "यूएसबी ड्राइव सम्मिलन और खिड़कियों सेवा का उपयोग हटाने और सी # का पता लगाने"

आप WMI का उपयोग कर सकते हैं, यह आसान है और यह सेवाओं के साथ WndProc समाधान से बेहतर काम करता है

ये रहा एक सरल उदाहरण:

using System.Management; ManagementEventWatcher watcher = new ManagementEventWatcher(); WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2"); watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); watcher.Query = query; watcher.Start(); watcher.WaitForNextEvent(); 

और बस 🙂

यह मेरे लिए अच्छी तरह से काम करता है, प्लस आप डिवाइस के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

 using System.Management; private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e) { ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"]; foreach (var property in instance.Properties) { Console.WriteLine(property.Name + " = " + property.Value); } } private void DeviceRemovedEvent(object sender, EventArrivedEventArgs e) { ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent["TargetInstance"]; foreach (var property in instance.Properties) { Console.WriteLine(property.Name + " = " + property.Value); } } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { WqlEventQuery insertQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'"); ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery); insertWatcher.EventArrived += new EventArrivedEventHandler(DeviceInsertedEvent); insertWatcher.Start(); WqlEventQuery removeQuery = new WqlEventQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'"); ManagementEventWatcher removeWatcher = new ManagementEventWatcher(removeQuery); removeWatcher.EventArrived += new EventArrivedEventHandler(DeviceRemovedEvent); removeWatcher.Start(); // Do something while waiting for events System.Threading.Thread.Sleep(20000000); } 

विटालि बीबी पोस्ट को जोड़ना

ऐसी घटना को बढ़ाने के लिए जहां कोई भी यूएसबी डिवाइस डाला जाता है, निम्न का उपयोग करें:

 var watcher = new ManagementEventWatcher(); var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"); watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); watcher.Query = query; watcher.Start(); 

यह एक घटना बढ़ाएगा जब कोई USB डिवाइस प्लग हो जाए। यह एक राष्ट्रीय उपकरण डीएक्यू के साथ भी काम करता है जो कि मैं स्वत: पता लगाने की कोशिश कर रहा हूं।

विटाली बी का जवाब डिवाइस को हटाने के लिए कवर नहीं करता है मैंने इसे थोड़ा बदल दिया है जब मीडिया को डाला जाता है और निकाला जाता है और डाला गया मीडिया के ड्राइव अक्षर को प्राप्त करने के लिए कोड दोनों को ट्रिगर किया जाता है।

 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(); } } } 

आप प्रविष्टि ईवेंट्स का पता लगाने के लिए WMI का उपयोग भी कर सकते हैं। यह WM_CHANGEDEVICE संदेशों के लिए मॉनिटरिंग से थोड़ा अधिक जटिल है, लेकिन इसके लिए विंडो संचालन की आवश्यकता नहीं है जो उपयोगी हो सकता है यदि आप पृष्ठभूमि के रूप में सेवा के रूप में चल रहे हैं

WM_CHANGEDEVICE हैंडलिंग का प्रयास करें

यह है कि हमने सी # नेट 4.0 के साथ एक WPF ऐप के तहत किया है। हम अभी भी "कैसे बता सकते हैं कि किस प्रकार की डिवाइस डाली गई / निकाली गई" के उत्तर के लिए खोज रहे हैं, लेकिन यह एक शुरुआत है:

  using System.Windows.Interop; ... public partial class MainWindow : Window { ... public MainWindow() { ... } //============================================================ // WINDOWS MESSAGE HANDLERS // private const int WM_DEVICECHANGE = 0x0219; // int = 537 private const int DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 0x00000004; /// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); HwndSource source = PresentationSource.FromVisual(this) as HwndSource; source.AddHook(WndProc); } private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (msg == WM_DEVICECHANGE) { ReadDongleHeader(); } return IntPtr.Zero; } } 

ऊपर दिए गए सभी उत्तर में थोड़ा सा संपादित करें:

 using System.Management; public partial class MainForm : Form { public MainForm() { InitializeComponent(); bgwDriveDetector.DoWork += bgwDriveDetector_DoWork; bgwDriveDetector.RunWorkerAsync(); } private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e) { string driveName = e.NewEvent.Properties["DriveName"].Value.ToString(); MessageBox.Show(driveName + " inserted"); } private void DeviceRemovedEvent(object sender, EventArrivedEventArgs e) { string driveName = e.NewEvent.Properties["DriveName"].Value.ToString(); MessageBox.Show(driveName + " removed"); } void bgwDriveDetector_DoWork(object sender, DoWorkEventArgs e) { var insertQuery = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"); var insertWatcher = new ManagementEventWatcher(insertQuery); insertWatcher.EventArrived += DeviceInsertedEvent; insertWatcher.Start(); var removeQuery = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3"); var removeWatcher = new ManagementEventWatcher(removeQuery); removeWatcher.EventArrived += DeviceRemovedEvent; removeWatcher.Start(); } }