u-s-soldiers

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            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,"設(shè)備改變DBT_CONFIGCHANGECANCELED","提示",MB_OK);
            break;
           case DBT_CONFIGCHANGED:
            MessageBox(NULL,"設(shè)備改變DBT_CONFIGCHANGED","提示",MB_OK);
            break;
           //case DBT_CUSTOMEVENT:
           // MessageBox(NULL,"設(shè)備改變DBT_CUSTOMEVENT","提示",MB_OK);
           // break;
           case DBT_DEVICEARRIVAL: // A device has been inserted and is now available. 
           
            MessageBox(NULL,"設(shè)備改變DBT_DEVICEARRIVAL","提示",MB_OK);
            
            DEV_BROADCAST_HDR *stHDR;
            stHDR = (DEV_BROADCAST_HDR *)lParam;

            //判斷設(shè)備類型
            switch(stHDR->dbch_devicetype)
            {
            case DBT_DEVTYP_DEVNODE:
             MessageBox(NULL,"設(shè)備類型 DBT_DEVTYP_DEVNODE","提示",MB_OK);
             break;
            case DBT_DEVTYP_NET:
             MessageBox(NULL,"設(shè)備類型 DBT_DEVTYP_NET","提示",MB_OK);
             break;
            case DBT_DEVTYP_OEM:
             MessageBox(NULL,"設(shè)備類型 DBT_DEVTYP_OEM","提示",MB_OK);
             break;
            case DBT_DEVTYP_PORT:
             MessageBox(NULL,"設(shè)備類型 DBT_DEVTYP_PORT","提示",MB_OK);
             break;
            case DBT_DEVTYP_VOLUME:// Logical volume. This structure is a DEV_BROADCAST_VOLUME structure
             MessageBox(NULL,"設(shè)備類型 DBT_DEVTYP_VOLUME","提示",MB_OK);
             break;
            }
            //
           
            break;
            case DBT_DEVICEQUERYREMOVE:
             MessageBox(NULL,"設(shè)備改變DBT_DEVICEQUERYREMOVE","提示",MB_OK);
             break; 
            case DBT_DEVICEQUERYREMOVEFAILED:
             MessageBox(NULL,"設(shè)備改變DBT_DEVICEQUERYREMOVEFAILED","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVECOMPLETE:// A device has been removed.
             MessageBox(NULL,"設(shè)備改變DBT_DEVICEREMOVECOMPLETE","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVEPENDING://
             MessageBox(NULL,"設(shè)備改變DBT_DEVICEREMOVEPENDING","提示",MB_OK);
             break; 
            case DBT_DEVICETYPESPECIFIC://
             MessageBox(NULL,"設(shè)備改變DBT_DEVICETYPESPECIFIC","提示",MB_OK);
             break; 
            case DBT_QUERYCHANGECONFIG: 
             MessageBox(NULL,"設(shè)備改變DBT_QUERYCHANGECONFIG","提示",MB_OK);
             break; 
            case DBT_USERDEFINED ://
             MessageBox(NULL,"設(shè)備改變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,"類創(chuàng)建失敗","類創(chuàng)建失敗",MB_OK);
           }
           hwndMain = CreateWindow("CheckUSB","檢測USB設(shè)備",
            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
          代碼中有部分參數(shù)意思不是很明確,在參考了msdn后做了一定的改動。用U盤測試并沒有什么問題。反正那幾個參數(shù)標(biāo)識的也不是U盤的參數(shù)。
          用USB鼠標(biāo)和鍵盤測試并沒有反映,但是可以監(jiān)視USB存儲設(shè)備感覺已經(jīng)達到要求了,有時間再改進一下

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

          Feedback

          # re: 一個用于監(jiān)視USB設(shè)備插入拔出的程序代碼 2009-05-26 22:46 士木
          不能收到刪除優(yōu)盤消息  回復(fù)  更多評論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沾益县| 安陆市| 崇仁县| 榆林市| 尚义县| 信阳市| 交口县| 高碑店市| 永城市| 涞水县| 晋江市| 巴马| 城固县| 白山市| 喀喇| 古丈县| 互助| 平和县| 华阴市| 文成县| 白朗县| 禹州市| 慈利县| 昆明市| 万山特区| 揭阳市| 江孜县| 循化| 永济市| 江山市| 响水县| 尖扎县| 油尖旺区| 镶黄旗| 连平县| 门源| 巩义市| 明光市| 疏附县| 横峰县| 广平县|