安装钩子,托管C++中的字符串及其它
敬业的IT人
互联网
佚名
2008-1-3 19:12:08
源码下载
我想调用 SetWindowsHookEx 来设置WH_CBT 钩子,但我了解到 MFC也安装了这个钩子,也就是在一个线程中安装了两次 WH_CBT,这样做能行吗?
Ken Dang
答案是肯定的。只要遵循正确的步骤,你可以安装几个相同类型的钩子。Windows 的钩子是被设计用于一系列类似子类化这样的操作。为了安装钩子,得调用 SetWindowsHookEx 函数,参数为钩子类型和指向钩子过程的指针。SetWindowsHookEx 返回一个指向旧钩子的句柄:HHOOK hOldHook; // 全局
...
hOldHook = SetWindowsHookEx(WH_CBT, MyCbtProc, ...);现在只要发生有钩子事件,Windows 便调用你的钩子过程。当你的过程处理完该事件,则应该用 CallNextHookEx 调用下一个钩子:
LRESULT CALLBACK
MyCbtProc(int code, ...)
{
if (code==/* whatever */) {
// do something
}
return CallNextHookEx(hOldHook, code, ...);
}当然,没有人强迫你调用 CallNextHookEx,但是如果不调用,那么你的程序可能会垮掉。MFC 使用 CBT 钩子来监视窗口的创建。只要一创建窗口,Windows 都会用 HCBT_CREATEWND 调用此 CBT 钩子。MFC 通过子类化窗口来处理 HCBT_CREATEWND,并将它附属到其 CWnd 对象。具体细节比较复杂,这里仅给出一个简版的代码:
// 来自 wincore.cpp 的简化代码
LRESULT _AfxCbtFilterHook(int code, WPARAM wp, ...)
{
if (code==HCBT_CREATEWND) {
CWnd* pWndInit = pThreadState->m_pWndInit;
HWND hWnd = (HWND)wp;
pWndInit->Attach(hWnd);
SetWindowLborder="0" alt="安装钩子,托管C++中的字符串及其它(图一)" width="400" height="176" />- 如何重装xp系统图解
- 下载Flash播放插件
- 巧妙清除Windows 2000/XP登录密码
- 如何利用路由器设置局域网
- QQ空间打不开
- 开机后鼠标不动怎么办
- Excel密码保护的解除方法与解除原理
- Windows XP注册表详解
- 3dmax不锈钢金属材质的制作方法
- 硬盘变成raw格式怎么办
Figure 2 模块信息
我要如何将 MFCCString 转换为托管 C++ 中的 String?我有一个函数是这样的:
int ErrMsg::ErrorMessage(CString& msg) cborder="0" alt="安装钩子,托管C++中的字符串及其它(图二)" width="360" height="144" />- 如何重装xp系统图解
- 下载Flash播放插件
- 巧妙清除Windows 2000/XP登录密码
- 如何利用路由器设置局域网
- QQ空间打不开
- 开机后鼠标不动怎么办
- Excel密码保护的解除方法与解除原理
- Windows XP注册表详解
- 3dmax不锈钢金属材质的制作方法
- 硬盘变成raw格式怎么办
Figure 5 RefTest 运行画面馆
顺祝编程愉快!
您的提问和评论可发送到 Paul 的信箱:cppqa@microsoft.com.
收藏 进入讨论组讨论。
- 最新文章
- 用C++ Builder创建上下文菜单扩展处理器[01-03]
- 用C++进行简单的文件I/O操作[01-03]
- 编写可复用性更好的C++代码:Band对象和COMToys(..[01-03]
- C++ Builder开发经验几则[01-03]
- 编写可复用性更好的C++代码:Band对象和COMToys(..[01-03]
- 在VB中设计倒计时程序[01-03]
- 相关文章
