钩子函数举例
2014-04-10 13:16
232 查看
用VS2010建立一个基于对话框的应用程序HOOKDLG,添加修改以下函数可以使程序屏蔽掉鼠标和键盘消息,按Alt+F4键退出程序:
HWND hWnd = NULL; //定义成全局变量 HHOOK hKeyboard; HHOOK hMouse; LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠标钩子函数 { return 1; // 返回非零值表示已经对当前消息进行了处理,这样系统就不会再将这个消息传递给目标窗口过程 } LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lparam ) { if( VK_F4 == wParam && (1 == (lparam>>29&1)) ) // 系统后门:Alt+F4键退出程序 { ::SendMessageA( hWnd, WM_CLOSE, 0, 0 ); // 卸载钩子函数 UnhookWindowsHookEx( hKeyboard ); UnhookWindowsHookEx( hMouse ); } return 1; } // CHookDlg 消息处理程序 BOOL CHookDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 hWnd = m_hWnd; // 安装钩子函数 hMouse = SetWindowsHookEx( WH_MOUSE, MouseProc, NULL, GetCurrentThreadId() ); hKeyboard = SetWindowsHookEx( WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId() ); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
相关文章推荐
- Sphinx/coreseek/mysql全文检索
- Silverlight RadTreeView 控件使用介绍
- MFC中ListControl控件的使用
- ubuntu下设置开机自启动项
- radio button用法(转)
- android中ExpandableListView增加自定义组件
- 用客户端命令psql连接 PostgreSQL 不输入密码的方法
- Core Image
- 访问者模式讨论篇:java的动态绑定与双分派
- 如此爱你
- window7 32位 xampp 配置 memecach
- PHP的CI框架集成Smarty的最佳方式
- 一条感动很多家长的微信:每个孩子都是一颗花的种子
- 查询语句
- jq删除页面标签
- WebView常用方法
- 使用@Controller注解为什么要配置<mvc:annotation-driven />
- CSI-VII:存储器层次结构-神秘“金字塔”
- uva 11889 - Benefit(数论)
- ナミダボシ feat.诗音