0
大家好我需要一個C++代碼來獲取便攜式設備通知,當用戶連接一些便攜式設備到系統。我的獲取大容量存儲設備通知的代碼部分如下,請通過它並建議我如何爲便攜式設備執行此操作。獲取便攜式設備通知
LRESULT CALLBACK DLLWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HDEVNOTIFY hDeviceNotify;
__int32 devType;
char c;
char buf[5]={0};
PawCallBack *callbackHandle;
char Buffer[10];
switch (message)
{
case WM_CREATE:
RegisterHotKey(hwnd, 1, MOD_ALT , VK_SNAPSHOT);
RegisterHotKey(hwnd, 2, 0 , VK_SNAPSHOT);
if (! DoRegisterDeviceInterfaceToHwnd(WceusbshGUID, hwnd, &hDeviceNotify))
{
// Terminate on failure.
ExitProcess(1);
}
break;
case WM_HOTKEY:
LPSTR temppath;
CaptureScreen(GetDesktopWindow());
UnicodeToAnsi(temp_filename, &temppath);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->ImageSavePath,temppath);
callbackHandle->servicecode = 111;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10,0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
break;
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_HDR pHdr;
PDEV_BROADCAST_VOLUME vol;
// Output some messages to the window.
switch (wParam)
{
case DBT_DEVICEARRIVAL:
//MessageBoxA(NULL,"Device Arrived", "Info", MB_OK);
pHdr = (PDEV_BROADCAST_HDR)lParam;
if(pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
vol = (PDEV_BROADCAST_VOLUME)pHdr;
c = DriveMaskToLetter(vol->dbcv_unitmask);
memset(buf,0,5);
sprintf(buf,"%c:", c);
//MessageBoxA(NULL,&c, "Device Arrived", MB_OK);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->DriveName, buf);
callbackHandle->servicecode = 109;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10, 0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
}
break;
case DBT_DEVICEREMOVECOMPLETE:
pHdr = (PDEV_BROADCAST_HDR)lParam;
if(pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
vol = (PDEV_BROADCAST_VOLUME)pHdr;
c = DriveMaskToLetter(vol->dbcv_unitmask);
memset(buf,0,5);
sprintf(buf,"%c:",c);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->DriveName,buf);
callbackHandle->servicecode = 110;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10, 0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
}
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
case WM_CLOSE:
if (! UnregisterDeviceNotification(hDeviceNotify))
{
MessageBoxA(NULL, "UnregisterDeviceNotification Failed", "Info",MB_OK);
}
UnregisterHotKey(hwnd, 1);
UnregisterHotKey(hwnd, 2);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
}
上面的代碼工作完美的大容量存儲設備,但現在我想將其擴展爲便攜式設備,請通過我的代碼,並建議我該怎麼爲便攜式設備做。在此先感謝..
[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –
監視器'WM_DEVICECHANGE'窗口消息 – Jay
你的意思是什麼「便攜式設備」? iPod播放器? TomTom GPS?樂高頭腦風暴? – MSalters