Как я обнаруживаю, когда съемный диск вставляется с помощью C#?

16
задан Matt Becker 14 August 2014 в 15:35
поделиться

3 ответа

Дайте этому выстрел...

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

        }
    }

}
16
ответ дан 30 November 2019 в 21:29
поделиться

Существует намного меньше громоздких способов сделать это, чем использование опроса WMI - просто получает WM_DEVICECHANGE:

http://msdn.microsoft.com/en-us/library/aa363215.aspx

9
ответ дан 30 November 2019 в 21:29
поделиться

Самый простой путь состоял бы в том, чтобы создать Обработчик Автоматических воспроизведений:

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

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

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

1
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: