Pull to refresh

Вывод информации о подключенном USB устройстве

Моей целью было создать приложение которое, смогло бы определять подключение и отключение 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

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;
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.