C++/새 장치 감지 WM_DEVICECHANGE

  1. ...
  2. ON_MESSAGE(WM_DEVICECHANGE, &CTestDlg::OnMyDeviceChange)
  3. ...
  4. char DriveLetterFromMask(int mask) {
  5.     int count = 0; while (mask > 1) { mask >>= 1; count++; }
  6.     return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[count];
  7. }
  8. LRESULT CTestDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
  9. {
  10.     if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam ) {
  11.         PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
  12.         PDEV_BROADCAST_DEVICEINTERFACE pDevInf;
  13.         PDEV_BROADCAST_HANDLE pDevHnd;
  14.         PDEV_BROADCAST_OEM pDevOem;
  15.         PDEV_BROADCAST_PORT pDevPort;
  16.         PDEV_BROADCAST_VOLUME pDevVolume;
  17.         switch( pHdr->dbch_devicetype ) {
  18.             case DBT_DEVTYP_DEVICEINTERFACE:
  19.                 pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
  20.                 //UpdateDevice(pDevInf, wParam);
  21.                 break;
  22.             case DBT_DEVTYP_HANDLE:
  23.                 pDevHnd = (PDEV_BROADCAST_HANDLE)pHdr;
  24.                 break;
  25.             case DBT_DEVTYP_OEM:
  26.                 pDevOem = (PDEV_BROADCAST_OEM)pHdr;
  27.                 break;
  28.             case DBT_DEVTYP_PORT:
  29.                 pDevPort = (PDEV_BROADCAST_PORT)pHdr;
  30.                 break;
  31.             case DBT_DEVTYP_VOLUME:
  32.                 pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
  33.                 CString str;
  34.                 str.Format(_T("%C:"), DriveLetterFromMask(pDevVolume->dbcv_unitmask));
  35.                 if (wParam == DBT_DEVICEARRIVAL)
  36.                 {
  37.                     OutputDebugString(_T("새 장치 감지"));
  38.                     OutputDebugString(str.GetBuffer(0));
  39.                 }
  40.                 break;
  41.         }
  42.     }
  43. #endif
  44.     return 0;
  45. }

새 장치 감지
F:

이 글에는 0 개의 댓글이 있습니다.