u-s-soldiers

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            13 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          // UsbHook.cpp : Defines the entry point for the application.
          //

          #include "stdafx.h"
          #include "Dbt.h"

          void DeviceChangeEventOpt(WPARAM wParam, LPARAM lParam)
          {
           switch(wParam)
           {
           case DBT_CONFIGCHANGECANCELED:
            MessageBox(NULL,"設備改變DBT_CONFIGCHANGECANCELED","提示",MB_OK);
            break;
           case DBT_CONFIGCHANGED:
            MessageBox(NULL,"設備改變DBT_CONFIGCHANGED","提示",MB_OK);
            break;
           //case DBT_CUSTOMEVENT:
           // MessageBox(NULL,"設備改變DBT_CUSTOMEVENT","提示",MB_OK);
           // break;
           case DBT_DEVICEARRIVAL: // A device has been inserted and is now available. 
           
            MessageBox(NULL,"設備改變DBT_DEVICEARRIVAL","提示",MB_OK);
            
            DEV_BROADCAST_HDR *stHDR;
            stHDR = (DEV_BROADCAST_HDR *)lParam;

            //判斷設備類型
            switch(stHDR->dbch_devicetype)
            {
            case DBT_DEVTYP_DEVNODE:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_DEVNODE","提示",MB_OK);
             break;
            case DBT_DEVTYP_NET:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_NET","提示",MB_OK);
             break;
            case DBT_DEVTYP_OEM:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_OEM","提示",MB_OK);
             break;
            case DBT_DEVTYP_PORT:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_PORT","提示",MB_OK);
             break;
            case DBT_DEVTYP_VOLUME:// Logical volume. This structure is a DEV_BROADCAST_VOLUME structure
             MessageBox(NULL,"設備類型 DBT_DEVTYP_VOLUME","提示",MB_OK);
             break;
            }
            //
           
            break;
            case DBT_DEVICEQUERYREMOVE:
             MessageBox(NULL,"設備改變DBT_DEVICEQUERYREMOVE","提示",MB_OK);
             break; 
            case DBT_DEVICEQUERYREMOVEFAILED:
             MessageBox(NULL,"設備改變DBT_DEVICEQUERYREMOVEFAILED","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVECOMPLETE:// A device has been removed.
             MessageBox(NULL,"設備改變DBT_DEVICEREMOVECOMPLETE","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVEPENDING://
             MessageBox(NULL,"設備改變DBT_DEVICEREMOVEPENDING","提示",MB_OK);
             break; 
            case DBT_DEVICETYPESPECIFIC://
             MessageBox(NULL,"設備改變DBT_DEVICETYPESPECIFIC","提示",MB_OK);
             break; 
            case DBT_QUERYCHANGECONFIG: 
             MessageBox(NULL,"設備改變DBT_QUERYCHANGECONFIG","提示",MB_OK);
             break; 
            case DBT_USERDEFINED ://
             MessageBox(NULL,"設備改變DBT_USERDEFINED","提示",MB_OK);
             break;
             
           }
          }

          HWND  hwndMain;
          LRESULT CALLBACK WndProc(
                 HWND hwnd,      // handle to window
                 UINT uMsg,      // message identifier
                 WPARAM wParam,  // first message parameter
                 LPARAM lParam   // second message parameter
                 )
          {
           
           switch(uMsg)
           {
           case WM_CREATE:
            break;
           case WM_DESTROY:
            PostQuitMessage(0);
            break;
           case WM_COMMAND:
            break;
           case WM_DEVICECHANGE:
            
            DeviceChangeEventOpt(wParam,lParam);
            
            
            break;
           }
           return DefWindowProc(hwnd,uMsg,wParam,lParam);
          }

          int APIENTRY WinMain(HINSTANCE hInstance,
                               HINSTANCE hPrevInstance,
                               LPSTR     lpCmdLine,
                               int       nCmdShow)
          {
            // TODO: Place code here.

           // TODO: Place code here.
           
           WNDCLASSEX wclass;
           MSG msg;
           
           wclass.cbClsExtra = 0;
           wclass.cbSize = sizeof(WNDCLASSEX);
           wclass.cbWndExtra = 0;
           wclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
           wclass.hCursor = NULL;
           wclass.hIcon = NULL;
           wclass.hIconSm = NULL;
           wclass.hInstance = hInstance;
           wclass.lpfnWndProc =(WNDPROC)WndProc;
           wclass.lpszClassName = "CheckUSB";
           wclass.lpszMenuName = NULL;
           wclass.style = CS_DBLCLKS;
           
           
           
           if(!RegisterClassEx(&wclass))
           {
            MessageBox(NULL,"類創建失敗","類創建失敗",MB_OK);
           }
           hwndMain = CreateWindow("CheckUSB","檢測USB設備",
            WS_OVERLAPPED | WS_SYSMENU  | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 320, 300,NULL, NULL, hInstance, NULL);
           while(GetMessage(&msg,NULL,0,0))
           {
            TranslateMessage(&msg);   //translate the message into its char equivelent
            DispatchMessage(&msg);
           }
           
           return msg.wParam;

          }

           

          原帖來自http://search.csdn.net/Expert/topic/989/989392.xml?temp=.1137812
          代碼中有部分參數意思不是很明確,在參考了msdn后做了一定的改動。用U盤測試并沒有什么問題。反正那幾個參數標識的也不是U盤的參數。
          用USB鼠標和鍵盤測試并沒有反映,但是可以監視USB存儲設備感覺已經達到要求了,有時間再改進一下

          posted on 2008-04-30 03:38 u-s-soldiers 閱讀(1339) 評論(1)  編輯  收藏

          Feedback

          # re: 一個用于監視USB設備插入拔出的程序代碼 2009-05-26 22:46 士木
          不能收到刪除優盤消息  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 治多县| 盐城市| 苗栗县| 岳西县| 泌阳县| 山丹县| 岚皋县| 茌平县| 化隆| 淄博市| 五指山市| 成武县| 彭泽县| 嵩明县| 聂荣县| 琼中| 金门县| 屏东县| 安顺市| 石渠县| 遂平县| 墨江| 凌海市| 宁蒗| 岑巩县| 犍为县| 包头市| 榕江县| 太仓市| 金寨县| 普定县| 新绛县| 鄂州市| 安宁市| 买车| 宜兰市| 繁昌县| 鹤壁市| 东方市| 宜州市| 怀安县|