Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 124

Libusbdotnet и отслеживание подключение/отключение USB

04.10.2019, 18:18. Показов 2272. Ответов 0

Студворк — интернет-сервис помощи студентам
Ищу Ивент в libusbdotnet который бы дергал событие при подключение/отключение USB устройства
Нашел метод через WndProc

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#region Определение подключения HID
        private void RegisterNotification(Guid guid)
        {
            Dbt.DEV_BROADCAST_DEVICEINTERFACE devIF = new Dbt.DEV_BROADCAST_DEVICEINTERFACE();
            IntPtr devIFBuffer;
 
            // Set to HID GUID
            devIF.dbcc_size = Marshal.SizeOf(devIF);
            devIF.dbcc_devicetype = Dbt.DBT_DEVTYP_DEVICEINTERFACE;
            devIF.dbcc_reserved = 0;
            devIF.dbcc_classguid = guid;
 
            // Allocate a buffer for DLL call
            devIFBuffer = Marshal.AllocHGlobal(devIF.dbcc_size);
 
            // Copy devIF to buffer
            Marshal.StructureToPtr(devIF, devIFBuffer, true);
 
            // Register for HID device notifications
            m_hNotifyDevNode = Dbt.RegisterDeviceNotification(this.Handle, devIFBuffer, Dbt.DEVICE_NOTIFY_WINDOW_HANDLE);
 
            // Copy buffer to devIF
            Marshal.PtrToStructure(devIFBuffer, devIF);
 
            // Free buffer
            Marshal.FreeHGlobal(devIFBuffer);
        }
 
        // Unregister HID device notification
        private void UnregisterNotification()
        {
            uint ret = Dbt.UnregisterDeviceNotification(m_hNotifyDevNode);
        }
        protected override void WndProc(ref Message m)
        {
            // Intercept the WM_DEVICECHANGE message
            if (m.Msg == Dbt.WM_DEVICECHANGE)
            {
                // Get the message event type
                int nEventType = m.WParam.ToInt32();
 
                // Check for devices being connected or disconnected
                if (nEventType == Dbt.DBT_DEVICEARRIVAL ||
                    nEventType == Dbt.DBT_DEVICEREMOVECOMPLETE)
                {
                    Dbt.DEV_BROADCAST_HDR hdr = new Dbt.DEV_BROADCAST_HDR();
 
                    // Convert lparam to DEV_BROADCAST_HDR structure
                    Marshal.PtrToStructure(m.LParam, hdr);
 
                    if (hdr.dbch_devicetype == Dbt.DBT_DEVTYP_DEVICEINTERFACE)
                    {
                        Dbt.DEV_BROADCAST_DEVICEINTERFACE_1 devIF = new Dbt.DEV_BROADCAST_DEVICEINTERFACE_1();
 
                        // Convert lparam to DEV_BROADCAST_DEVICEINTERFACE structure
                        Marshal.PtrToStructure(m.LParam, devIF);
 
                        // Get the device path from the broadcast message
                        string devicePath = new string(devIF.dbcc_name);
 
                        // Remove null-terminated data from the string
                        int pos = devicePath.IndexOf((char)0);
                        if (pos != -1)
                        {
                            devicePath = devicePath.Substring(0, pos);
                        }
 
                        // An HID device was connected or removed
                        if (nEventType == Dbt.DBT_DEVICEREMOVECOMPLETE)
                        {
                            MessageBox.Show("Device  + devicePath +  was removed");
                        }
                        else if (nEventType == Dbt.DBT_DEVICEARRIVAL)
                        {
                            MessageBox.Show("Device  + devicePath +  arrived");
                        }
                    }
                }
            }
            base.WndProc(ref m);
        }
        #endregion
class Dbt
    {
        #region Dbt Class - Constants
 
        public const ushort WM_DEVICECHANGE = 0x0219;
        public const ushort DBT_DEVICEARRIVAL = 0x8000;
        public const ushort DBT_DEVICEREMOVECOMPLETE = 0x8004;
        public const ushort DBT_DEVTYP_DEVICEINTERFACE = 0x0005;
        public const int DEVICE_NOTIFY_WINDOW_HANDLE = 0x0000;
 
        #endregion
 
        #region Dbt Class - Device Change Structures
 
        [StructLayout(LayoutKind.Sequential)]
        public class DEV_BROADCAST_DEVICEINTERFACE
        {
            public int dbcc_size;
            public int dbcc_devicetype;
            public int dbcc_reserved;
            public Guid dbcc_classguid;
            public char dbcc_name;
        }
 
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public class DEV_BROADCAST_DEVICEINTERFACE_1
        {
            public int dbcc_size;
            public int dbcc_devicetype;
            public int dbcc_reserved;
            public Guid dbcc_classguid;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)]
            public char[] dbcc_name;
        }
 
        [StructLayout(LayoutKind.Sequential)]
        public class DEV_BROADCAST_HDR
        {
            public int dbch_size;
            public int dbch_devicetype;
            public int dbch_reserved;
        }
 
        #endregion
 
        #region DLL Imports
 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, uint Flags);
 
        [DllImport("user32.dll")]
        public static extern uint UnregisterDeviceNotification(IntPtr Handle);
 
        #endregion
    }
Но мне что то кажется жирновато как то
Должно же быть событие в libusbdotnet, (в документацию я лазил в поисках правды, не нашел)

Добавлено через 5 минут
Может кому надо
Код инициализации этого чуда
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.Runtime.InteropServices;
private void Form_Load(object sender, EventArgs e)
        {
            Guid hidGuid = new Guid("4d1e55b2-f16f-11cf-88cb-001111000030");
            Guid usbXpressGuid = new Guid("3c5e1462-5695-4e18-876b-f3f3d08aaf18");
            Guid cp210xGuid = new Guid("993f7832-6e2d-4a0f-b272-e2c78e74f93e");
            Guid newCP210xGuid = new Guid("a2a39220-39f4-4b88-aecb-3d86a35dc748");
            RegisterNotification(hidGuid);
 
        }
 
        private void Form_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterNotification();
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2019, 18:18
Ответы с готовыми решениями:

Отслеживание подключений USB устройств
Всем привет. Делал тут програмку и сталкнулся с проблемой. Вобщем программа должна при подключении к компу флешки выводить окно (в нем инфа...

Отслеживание подключаемых USB устройств
Всем привет. Возникла надобность отслеживать подключения флэшек. Я покопался в нэте и нашёл что есть такое сообщение DBT_DEVNODES_CHANGED...

Отключение/включение USB портов
можно написать в коде программу, на отключение включение портов USB?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2019, 18:18
Помогаю со студенческими работами здесь

Отключение питания USB порта
возможно ли на C# написать софт который будет отключать питания USB? а именно что бы при включении программы питание на одном из...

Подключение и отключение сетевых дисков
Здравствуйте. Подскажите, как , не используя Wnetaddconnection, средствами .Net подключаются и отключаются сетевые диски. Никак не могу...

Служба Windows: отловить подключение/отключение флешки
Здравствуйте! Пытаюсь написать свою службу для windows. Необходимо, чтобы служба реагировала на подключение/отключение флешки. В...

Не читаются данные с RFID через LibUsbDotNet
Суть вопроса вот в чем. Есть RFID reader usb китайский без SDK и без драйверов. В диспетчере устройств определяет его как клавиатура HID....

LibUsbDotNet - как программно поменять VID/PID
Здравствуйте. Осваиваю LibUsbDotNet. И сразу возникла куча вопросов. Есть у них на сайте пример, выводящий список подключенных...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru