Моей целью было создать приложение которое, смогло бы определять подключение и отключение USB-устройств (Флешки, внешние диски, телефоны, камеры и подобные устройства)
Решил использовать C++ потому что он не тащит за собой объемных библиотек как например C# .NET ну и WinApi потому что потребляет мало ресурсов и есть функция отлова событий WM_*
Моей целью является получить ID устройства (будь то принтер или флешка) в виде USB\Pid_XXXX&Vid_XXXX\Serial_number чтобы потом уже можно было работать с этим устройством через классы Win32_PnPEntity Win32_USBHub.
Начало понятно, ловим сообщение WM_DEVICECHANGE и из него берем DBT_DEVICEARRIVAL ну или если устройство отключено то DBT_DEVICEREMOVECOMPLETE. А вот далее я не могу понять что делать как извлечь ID устройства и подобное?
вот нашел кусок кода но к сожалению он действует только с CDROM
Решил использовать C++ потому что он не тащит за собой объемных библиотек как например C# .NET ну и WinApi потому что потребляет мало ресурсов и есть функция отлова событий WM_*
Моей целью является получить ID устройства (будь то принтер или флешка) в виде USB\Pid_XXXX&Vid_XXXX\Serial_number чтобы потом уже можно было работать с этим устройством через классы Win32_PnPEntity Win32_USBHub.
Начало понятно, ловим сообщение WM_DEVICECHANGE и из него берем DBT_DEVICEARRIVAL ну или если устройство отключено то DBT_DEVICEREMOVECOMPLETE. А вот далее я не могу понять что делать как извлечь ID устройства и подобное?
вот нашел кусок кода но к сожалению он действует только с CDROM
void Main_OnDeviceChange( HWND hwnd, WPARAM wParam, LPARAM lParam )
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
TCHAR szMsg[80];
switch(wParam )
{
case DBT_DEVICEARRIVAL:
// Check whether a CD or DVD was inserted into a drive.
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
if (lpdbv -> dbcv_flags & DBTF_MEDIA)
{
StringCchPrintf( szMsg, sizeof(szMsg)/sizeof(szMsg[0]),
TEXT("Drive %c: Media has arrived.\n"),
FirstDriveFromMask(lpdbv ->dbcv_unitmask) );
MessageBox( hwnd, szMsg, TEXT("WM_DEVICECHANGE"), MB_OK );
}
}
break;