11.3.3 键盘钩子DLL的调用
刚刚讲解了键盘钩子DLL的实现,本节将通过一个简单的对话框工程实例,讲解这个DLL的调用方法。
(1)创建一个基于对话框的工程CatchKeyBoardTest。为对话框添加两个按钮:一个命名为捕获,另外一个命名为释放。
(2)隐式调用DLL,首先需要载入DLL的头文件,并载入DLL对应的lib文件。
- #include "catchkey.h"
- #pragma comment("CatchKeyBoard.lib",lib)
说明:当然也可以为了方便直接载入lib文件,在VC++(www.cppentry.com) 6.0集成开发环境的工程菜单中选择添加工程-files。然后选择lib文件即可。
(3)为两个按钮添加处理函数,一个开始键盘钩子,一个结束键盘钩子。
- 01 //开始捕获键盘钩子事件
- 02 void CCatchKeyBoardTestDlg::OnCatch()
- 03 {
- 04 DWORD dwVK[] = {'P'};
- 05 int nLength = sizeof(dwVK) / sizeof(DWORD);
- 06 StartCatch(dwVK, nLength, this->m_hWnd); //开始捕获键盘消息
- 07 }
- 08 //停止捕获键盘钩子事件
- 09 void CCatchKeyBoardTestDlg::OnRelease()
- 10 {
- 11 StopCatch(); //停止捕获
- 12 }
(4)当开始键盘钩子后,键盘钩子DLL便开始监视所有进程的键盘事件,一旦有Ctrl与P的组合键时,便向这个窗体发送消息。因此需要在这个窗体中响应这个事件,定义事件(注意要和DLL中的值一致)如下:- #define WM_MY_SHORTS (WM_USER + 105)
然后实现这个事件的处理函数:- 01 LRESULT CCatchKeyBoardTestDlg::CatchKey(WPARAM wParam, LPARAM lParam)
- 02 {
- 03 MessageBox("已经捕获Ctrl+P"); //提示捕获到消息的信息
- 04 return 0;
- 05 }
当发出这个事件后,便弹出一个信息提示框。最后要将这个消息及消息处理事件进行映射:- BEGIN_MESSAGE_MAP(CCatchKeyBoardTestDlg, CDialog)
- ON_MESSAGE(WM_MY_SHORTS,CatchKey)
- END_MESSAGE_MAP()
(5)当单击"捕获"按钮后,按下Ctrl与P组合键,窗体将弹出提示信息,如图11.14所示。当单击"释放"按钮后,将停止对Ctrl+P的捕获。
|
| 图11.14 捕获Ctrl+P |