Подтвердить что ты не робот

Как определить, когда сменный диск вставлен с помощью С#?

Я просто беспокоюсь о Windows, поэтому нет необходимости входить в эзотерику о совместимости с Mono или что-то в этом роде.

Я также должен добавить, что приложение, которое я пишу, это WPF, и я предпочел бы избегать зависимости от System.Windows.Forms, если это вообще возможно.

4b9b3361

Ответ 1

Дайте этот снимок...

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");

        }
    }

}

Ответ 3

Самый простой способ - создать обработчик автовоспроизведения:

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

Autoplay Version 2 - это функция в Windows XP, которая сканирует первый четыре уровня съемных носителей, когда он приходит, ищет медиаконтент типы (музыка, графика или видео). Регистрация заявок завершена на основе типа контента. Когда сменный носитель, Windows XP определяет, какие действия выполнять оценивая содержание и сравнивая это для зарегистрированных обработчиков для этого содержание.

A подробная статья MSDN также доступна.