Unsolved print function char FirstDriveFromMask( ULONG unitmask ) with qDebug()
-
trying to make project in QT, I need to detect any new usb device and return the letter in my main.cpp.
I found this with google and it should work but I don't know how to have a print of the driver letter in my main.cpp with simple qDebug() by calling the function char FirstDriveFromMask(ULONG unitmask).
Could you help me?
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; case DBT_DEVICEREMOVECOMPLETE: // Check whether a CD or DVD was removed from 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 was removed.\n" ), FirstDriveFromMask(lpdbv ->dbcv_unitmask) ); MessageBox( hwnd, szMsg, TEXT("WM_DEVICECHANGE" ), MB_OK ); } } break; default: /* Process other WM_DEVICECHANGE notifications for other devices or reasons. */ ; } } /*------------------------------------------------------------------ FirstDriveFromMask( unitmask ) Description Finds the first valid drive letter from a mask of drive letters. The mask must be in the format bit 0 = A, bit 1 = B, bit 2 = C, and so on. A valid drive letter is defined when the corresponding bit is set to 1. Returns the first drive letter that was found. --------------------------------------------------------------------*/ char FirstDriveFromMask( ULONG unitmask ) { char i; for (i = 0; i < 26; ++i) { if (unitmask & 0x1) break; unitmask = unitmask >> 1; } return( i + 'A' ); }
-
Hi,
Not a direct answer but did you consider KDE’s Solid framework for that ?