用VS2010創建一個基於對話框的應用程序HOOKDLG,添加修改如下函數可使程序屏蔽掉鼠標和鍵盤消息,按Alt+F4鍵退出程序:框架
1 HWND hWnd = NULL; //定義成全局變量 2 HHOOK hKeyboard; 3 HHOOK hMouse; 4 5 LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠標鉤子函數 6 { 7 return 1; // 返回非零值表示已經對當前消息進行了處理,這樣系統就不會再將這個消息傳遞給目標窗口過程 8 } 9 10 LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lparam ) 11 { 12 if( VK_F4 == wParam && (1 == (lparam>>29&1)) ) // 系統後門:Alt+F4鍵退出程序 13 { 14 ::SendMessageA( hWnd, WM_CLOSE, 0, 0 ); 15 // 卸載鉤子函數 16 UnhookWindowsHookEx( hKeyboard ); 17 UnhookWindowsHookEx( hMouse ); 18 } 19 return 1; 20 } 21 22 23 // CHookDlg 消息處理程序 24 25 BOOL CHookDlg::OnInitDialog() 26 { 27 CDialogEx::OnInitDialog(); 28 29 // 將「關於...」菜單項添加到系統菜單中。 30 31 // IDM_ABOUTBOX 必須在系統命令範圍內。 32 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 33 ASSERT(IDM_ABOUTBOX < 0xF000); 34 35 CMenu* pSysMenu = GetSystemMenu(FALSE); 36 if (pSysMenu != NULL) 37 { 38 BOOL bNameValid; 39 CString strAboutMenu; 40 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 41 ASSERT(bNameValid); 42 if (!strAboutMenu.IsEmpty()) 43 { 44 pSysMenu->AppendMenu(MF_SEPARATOR); 45 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 46 } 47 } 48 49 // 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動 50 // 執行此操做 51 SetIcon(m_hIcon, TRUE); // 設置大圖標 52 SetIcon(m_hIcon, FALSE); // 設置小圖標 53 54 // TODO: 在此添加額外的初始化代碼 55 hWnd = m_hWnd; 56 57 // 安裝鉤子函數 58 hMouse = SetWindowsHookEx( WH_MOUSE, MouseProc, NULL, GetCurrentThreadId() ); 59 hKeyboard = SetWindowsHookEx( WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId() ); 60 61 return TRUE; // 除非將焦點設置到控件,不然返回 TRUE 62 }