2012-08-27 59 views
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; 
} 
} 

上面的代碼工作完美的大容量存儲設備,但現在我想將其擴展爲便攜式設備,請通過我的代碼,並建議我該怎麼爲便攜式設備做。在此先感謝..

+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

監視器'WM_DEVICECHANGE'窗口消息 – Jay

+0

你的意思是什麼「便攜式設備」? iPod播放器? TomTom GPS?樂高頭腦風暴? – MSalters

回答