上个周末闲来无事
想来做了一个computer-based training (CBT)全局系统钩子(global hook)
本来想着挺简单的事情
没想到其中碰到了很多问题
现在小小总结一下
包括我遇到的问题,想到的原因及找到的解决办法
我的系统环境是Vista Ultimate sp1, Visual Studio 2005 sp1
一般来说,做一个全局钩子,需要dll
恩 差不多是这样
不过对于鼠标键盘钩子是例外
我们还是老老实实的做dll吧
调试发现只能收到自己程序的消息
奇了怪了, 全局钩子变成了本地钩子,为什么
做一个全局钩子
需要做一个共享内存
我想主要是为了保存一个窗口句柄
以便接收消息
当然也可以不这么做
像这篇文章Using Window Messages to Implement Global System Hooks in C#
SetProp(GetDesktopWindow(), “WILSON_HOOK_HWND_CBT”, destination);
HWND dstWnd = (HWND)GetProp(GetDesktopWindow(), “WILSON_HOOK_HWND_CBT”);
不过我实在不知道他干嘛要这么费劲
我是使用#pragma data_seg()来跨进程保存数据的
使用时要注意,变量要初始化
开始的时候,我是在dll里的钩子的回调里写trace
这实在是个低级错误
后来改到主窗口的消息处理函数里
发现在调试的时候只能收到自己程序和vc的消息
想想难道在调式的时候,调式的程序挂在vc下面
而收不到别人的消息?(后来发现这个推断是错误的)
不管怎样 这次程序基本上可以工作了
做完这些工作 以为万事大吉
(更多…)
