博文
非Dll,设置hook(2009-11-09 13:30:00)
摘要:回调函数必须是静态函数或全局函数。
1 .如果你把它定义为类的成员函数,则应该在声明的时候加上static。
如:static LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam);
而且在函数的实现部分,即.cpp文件中,函数名前面应加上类名。
如:LRESULT CALLBACK CSettingDlg::MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;
}
函数的调用语句示例如下:SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
2.如果你把回调函数定义为全局函数
则只要把函数实现部分放在调用之前即可。头文件中不需要声明。函数名前没有类名。
如:
/ /函数现实部分
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;
}
/ /调用函数
void CSettingDlg::OnStart()
{
SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
}......