2,如何让程序避开全局键盘钩子的监视
2005-12-12 23:15
330 查看
转载:
在我的程序中安装一个局部键盘钩子(thread-specified hook),键盘钩子函数中不调用CallNextHookEx;
原理:
1.钩子链可以被破坏.同一类型的钩子会形成一个链,假如先被调用的钩子没有调用CallNextHookEx的话,后面的钩子将得不到调用.
2.对于某个特定的线程,线程钩子先于系统钩子被调用.
实验:
键盘钩子(WH_KEYBOARD)
我写了个简单的对话框程序,部分代码如下:
1.先声明钩子HHOOK gHook = NULL;
2.键盘钩子函数:
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(AfxGetMainWnd()->GetSafeHwnd(), "Thread hook", "keyboard", MB_OK);
return 0;
//return CallNextHookEx(gHook, nCode, wParam, lParam);
}
3.安装钩子:
DWORD nThreadid = GetCurrentThreadId();
gHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, AfxGetApp()->m_hInstance, nThreadid);
if(gHook == NULL)
{
AfxMessageBox("Install Keyboard Hook Failed", MB_OK);
}
4.卸载钩子
BOOL ret = UnhookWindowsHookEx(gHook);
实验方法如下:
1.先启动另一个程序,安装系统键盘钩子,再启动我的程序,安装局部键盘钩子,实验结果表明系统钩子对我的程序无效.
2.先启动我的程序,安装局部键盘钩子,再启动另一个程序,安装系统键盘钩子.在我的程序中系统键盘钩子无效.
在我的程序中安装一个局部键盘钩子(thread-specified hook),键盘钩子函数中不调用CallNextHookEx;
原理:
1.钩子链可以被破坏.同一类型的钩子会形成一个链,假如先被调用的钩子没有调用CallNextHookEx的话,后面的钩子将得不到调用.
2.对于某个特定的线程,线程钩子先于系统钩子被调用.
实验:
键盘钩子(WH_KEYBOARD)
我写了个简单的对话框程序,部分代码如下:
1.先声明钩子HHOOK gHook = NULL;
2.键盘钩子函数:
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(AfxGetMainWnd()->GetSafeHwnd(), "Thread hook", "keyboard", MB_OK);
return 0;
//return CallNextHookEx(gHook, nCode, wParam, lParam);
}
3.安装钩子:
DWORD nThreadid = GetCurrentThreadId();
gHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, AfxGetApp()->m_hInstance, nThreadid);
if(gHook == NULL)
{
AfxMessageBox("Install Keyboard Hook Failed", MB_OK);
}
4.卸载钩子
BOOL ret = UnhookWindowsHookEx(gHook);
实验方法如下:
1.先启动另一个程序,安装系统键盘钩子,再启动我的程序,安装局部键盘钩子,实验结果表明系统钩子对我的程序无效.
2.先启动我的程序,安装局部键盘钩子,再启动另一个程序,安装系统键盘钩子.在我的程序中系统键盘钩子无效.
相关文章推荐
- 如何让你的程序避开全局键盘钩子的监视
- 写了一个好玩的小软件, 监视鼠标以及键盘的动作, 全局钩子. HowTired
- 简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。
- VC++实现监视系统的键盘操作 创建记录键盘动作的全局钩子DLL
- 用键盘全局钩子[Hook]监视多进程键盘操作
- VC++实现监视系统的键盘操作(2) 创建记录键盘动作的全局钩子DLL
- [C#.net]如何解决安装系统全局钩子程序调试时失败的问题
- QQ是如何防止其它程序通过安装键盘钩子截获密码信息的猜想之一
- 利用键盘钩子开发按键发音程序
- 安装进程内钩子程序(鼠标钩子和键盘钩子)
- 如何建立内核级钩子控制操作系统实现程序隐身
- HOOK使用:全局键盘钩子
- 使用raw input 代替全局键盘钩子
- NULL指针如何避开检测引起程序崩溃
- 鼠标键盘钩子HOOK------->全局钩子(所有桌面软件都能响应此钩子)
- 利用键盘钩子开发按键发音程序
- 如何在C#中使用全局鼠标、键盘Hook
- 全局钩子监听键盘鼠标事件
- HOOK全局键盘钩子
- 热键枚举Winform程序全局热键与局部热键(键盘快捷键的捕获)