Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
Stipashka
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
1

Отловить событие подключения/отключения USB-носителя

15.08.2012, 01:16. Просмотров 6095. Ответов 5
Метки нет (Все метки)

Может кто нибуть четко написать что и где вписать (читал что нада менять код в главном Program.сs, но вроде есть и другие методы, тоже непонятные мне) и какие библиотеки подключить, чтоб отловить событие подключения/отключения USB-носителя (на перспективу, -что где менять чтоб отлавливать другие события).
Нашел кусок кода в Агурове, там использовалось CustomExeptionHandler, у меня он не активный и в референсах я не могу его найти.
У кого найдется время и кому не тяжело - помогите.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2012, 01:16
Ответы с готовыми решениями:

Отловить событие
Отловить событие, которое происходит при закрытии диспетчером задач моего процесса. Если такое...

Не получаается отловить событие
Имеется Datagridview с набором строк и столбцов. ячейки можно редактировать. Необходимо, чтобы...

Утилита для отключения usb-накопителей
Мне нужно написать небольшое приложение, висящее в трее, позволяющее максимально быстро «завершить...

Как отловить разрыв подключения [Socket]
Здравствуйте! Интересует как можно отловить момент, когда подключенный клиент разрывает соединение....

Отловить событие смены TabPage
У меня на форме есть элемент tabControl, и есть несколько tabPage, на каждом tabPage есть...

5
Savvy
121 / 119 / 6
Регистрация: 21.12.2011
Сообщений: 348
15.08.2012, 01:37 2
Stipashka, эммм, так тебе системные события или исключения надо? я чет не понял ваще.
0
Dozer74
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
15.08.2012, 09:51 3
Stipashka, если все-таки надо отловить подключение/отключение usb устройства, то мной тут уже поднималась схожая тема (вдруг поможет ). В общем у вас приложение WindowsForms, то можно переопределить WndProc в вашей главное форме:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
 
            if (m.WParam.ToInt32() == 0x8000)
            {
               //новое usb подключено
            }
            if (m.WParam.ToInt32() == 0x8004)  
            {
                // usb отключено
            }
        }
Ps этот же метод можно использовать, чтобы отловить другие события
2
Stipashka
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
15.08.2012, 11:32  [ТС] 4
Dozer74, я извиняюсь, но где мне взять тот параметр (Message m) чтоб передать его в эту функцию? Надо же где то проверять постоянно не произошло ли чего в системе?
А в ИФЕ, я так понимаю что число обозначает какое то событие, и для разных собитый есть разные обозначения.
Извените, но с этим проблемы у меня.
0
Dozer74
12 / 12 / 5
Регистрация: 16.03.2010
Сообщений: 37
15.08.2012, 14:30 5
Лучший ответ Сообщение было отмечено как решение

Решение

Stipashka, насчет Message можешь не беспокоиться: его тебе пришлет система, и объявлять его где-то в твоей программе не нужно. В качестве теста можешь сделать такую программу:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
        }
    }
}
она компилируется и запускается, хотя Message нигде не объявлен

Добавлено через 13 минут
А по ИФА и событий... Почитай про Windows Messages, в твоем случае конкретно про WM_DEVICECHANGE. Там как раз описано, что обозначают эти числа. В C#, по-моему, нет буквенных описаний сообщений, поэтому приходится использовать только числа. Для удобства можешь завести несколько констант и присвоить им понятные имена:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
 
            const int WM_DeviceChange = 0x219; //что-то связанное с usb
            const int DBT_DEVICEARRIVAL = 0x8000; //устройство подключено
            const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // устройство отключено
 
            if (m.Msg == WM_DeviceChange)
            {
                if (m.WParam.ToInt32() == DBT_DEVICEARRIVAL)
                {
                    //новое usb подключено
                }
                if (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE)
                {
                    // usb отключено
                }
                
            }
4
Stipashka
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
15.08.2012, 18:26  [ТС] 6
Да, спасибо, все работает.
0
15.08.2012, 18:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 18:26

Как отловить событие в monthCalendar на перелистывание
в календаре monthCalendar есть стрелки перелистывания месяцев. Как программно определить, в какую...

Скриншот окон: можно ли отловить это событие
Я делаю : 1. Сканирую процессы. 2. В процессах нахожу хендл нужного окна. 3. С помощью API...

Как отловить событие создания файла в папке
Пользователь, к примеру, пытается создать в папке новый файл, или скопировать туда существующий. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru