विटालीबी का जवाब डिवाइस को हटाने का कवर नहीं करता है। मैंने ईवेंट को ट्रिगर करने के लिए थोड़ा सा बदल दिया जब मीडिया और हटा दिया गया और डालने वाले मीडिया के ड्राइव अक्षर को प्राप्त करने के लिए कोड भी हटा दिया गया।
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();
}
}
}
स्रोत
2016-02-23 21:22:18
अच्छा प्रश्न है। मेरा पहला विचार यह है कि आपको अपनी सेवा को "डेस्कटॉप से बातचीत करने की अनुमति" के रूप में चिह्नित करना होगा और फिर एक छिपी हुई विंडो बनाएं। सुरक्षित विकल्प शायद एक विंडोज ऐप बनाने के लिए है जो स्टार्टअप पर चलता है - यह विंडो बना सकता है और फिर svc –
से संवाद कर सकता है संबंधित: http: // stackoverflow।कॉम/प्रश्न/6003822/कैसे-टू-डिटेक्ट-ए-यूएसबी-ड्राइव-है-प्लग-इन – DuckMaestro