مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

adam

عضویت از 1401/12/23

مراقبت از اتصال usb

  • سه شنبه 23 اسفند 1401
  • 09:49
تشکر میکنم

با سلام ،

3 اتصال usb در برنامه تعریف کردم حالا میخوام اگر اتصال ها قطع شد ( هرکدام ) در هر کدام از فرمها نرم افزار که بودم متوجه شوم ( مثلا دکمه ذخیره غیرفعال شود ) ، چه کار کنم که برنامه دایما اتصال داده شده را بررسی کند 

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

محمدرضا کریمانی

عضویت از 1400/03/31

  • شنبه 27 اسفند 1401
  • 16:35

یه راه حلش استفاده از یه بگ گراند تسک یا یه سرویس ویندوز یا هرچیز دیگه است 

و داخل اون باید چک کنی ایا 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 ایجاد نکردی و منابع سیستم هم اشغال نشده 

کاربر سایت

adam

عضویت از 1401/12/23

  • یکشنبه 28 اسفند 1401
  • 07:43

متشکرم از پاسخ جنابعالی  ، تست کردم ولی مشکل درام باز هم ممنونم ، تابررسی دقیق تر کنم و اگر رفع نشد مکم بگیرم .

کاربرانی که از این پست تشکر کرده اند adam

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)