Lesson 20 hook 和 数据库访问
20.1 HOOK 编程
20.1.1 基本知识
1,将特殊消息屏蔽,安装一个HOOK过程,称为钩子过程。
2,操作系统在传递消息时,将我们感兴趣的消息先传递给hook过程,在此函数中进行检查,然后决定是否放行该消息。
3,安装钩子过程
Setwindowshookex
20.1.2进程内钩子
1,安装鼠标钩子
_1, 定义相应的鼠标钩子过程
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
_2,在 OnInitDialog函数中调用
SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
2,安装键盘钩子
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{ return 1;}
3,对于键盘,可以只屏蔽某些键,如 VK_SPACE, VK_RETURN
4,也可以对特定的键操作,只按某个键退出程序。
_1,因为钩子函数是全局函数,所以发送消息调用全局的sendmessage函数
::sendmessage(g_hWnd,WM_CLOSE,0,0);
因为我们需要目标窗口的句柄,所以定义全部变量 g_hWnd
在OnInitDialog函数中,将其初始化为m_hWnd.
5, 发送关闭消息后,将已安装的钩子过程移除
UnhookWindowsHookEx(g_hKeyboard);