با سلام ،
3 اتصال usb در برنامه تعریف کردم حالا میخوام اگر اتصال ها قطع شد ( هرکدام ) در هر کدام از فرمها نرم افزار که بودم متوجه شوم ( مثلا دکمه ذخیره غیرفعال شود ) ، چه کار کنم که برنامه دایما اتصال داده شده را بررسی کند
یه راه حلش استفاده از یه بگ گراند تسک یا یه سرویس ویندوز یا هرچیز دیگه است
و داخل اون باید چک کنی ایا usb ها هنوز متصلند یا نه و اگه نبودند به برنامه با یه event اطلاع بدی (البته میتونی اینو هرجای کدت استفاده کنی بازم)
حالا چطوری بررسی کنی usb ایا وصل یا قطع شده ؟
خلاصش اینه که باید از
string queryString = "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_USBControllerDevice'";
WqlEventQuery query = new WqlEventQuery(queryString);
watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(USBEventReceived);
watcher.Start();
اینطوری میتونی اتصال یا قطع شدن usb را توی متود USBEventReceived چک کنی (البته دقت کن که queryString بسته به شرایط میتونه تغییر کنه )
و متود USBEventReceived :
private void USBEventReceived(object sender, EventArrivedEventArgs e)
{
var eventName = e.NewEvent.ClassPath.ClassName;
var deviceName = ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["Dependent"].ToString();
if (eventName == "__InstanceCreationEvent")
{
// رویداد اتصال کابل USB
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.DriveType == DriveType.Removable && drive.IsReady)
{
var driveName = drive.Name; // نام usb متصل شده
// رویداد اتصال کابل USB
}
}
}
else if (eventName == "__InstanceDeletionEvent")
{
// رویداد قطع کابل USB
}
}
میتونی موقع قطع کابل چک کنی که ایا در در لیست درایو ها به وسیله کد زیر اون usb ها هنوز موجودند یا نه
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.DriveType == DriveType.Removable && drive.IsReady)
{
}
}
خوب شد 1،000،000 تومان (شوخی ☺)
مزیت این روش اینه که متودت فقط موقع اتصال یا قطع یک دستگاه اجرا میشه و علکی یه حلقه یا interval ایجاد نکردی و منابع سیستم هم اشغال نشده
متشکرم از پاسخ جنابعالی ، تست کردم ولی مشکل درام باز هم ممنونم ، تابررسی دقیق تر کنم و اگر رفع نشد مکم بگیرم .
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)