设置全局钩子问题

lumei_1123 2011-03-30 05:51:47
我通过这样的代码设置全局钩子SetWindowsHookEx(WH_CBT,MsgFilterHookProc,g_hInst,0);,但是MsgFilterHookProc只有在自己的进程才能进入。
不知道为什么,我想监控所有的窗口设置焦点和失去焦点事件。请问各位高手如何设置全局钩子。
...全文
159 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
在他乡奋斗 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
调试程序是按进程调试的,断点是在被调试进程中设置的,不是所有进程执行到断点都会停下来,输出的调试信息也是一样。你可以用attach to process来调试其它进程。
[/Quote]
支持
mz_dong 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
调试程序是按进程调试的,断点是在被调试进程中设置的,不是所有进程执行到断点都会停下来,输出的调试信息也是一样。你可以用attach to process来调试其它进程。
[/Quote]

牛人出现了,不容易啊
lumei_1123 2011-04-02
  • 打赏
  • 举报
回复
3楼的代码和我源程序中的代码一样。感觉5、6楼的说法比较正确。
cnzdgs 2011-03-30
  • 打赏
  • 举报
回复
调试程序是按进程调试的,断点是在被调试进程中设置的,不是所有进程执行到断点都会停下来,输出的调试信息也是一样。你可以用attach to process来调试其它进程。
Eleven 2011-03-30
  • 打赏
  • 举报
回复
做成DLL.全局钩子
fishion 2011-03-30
  • 打赏
  • 举报
回复
// CBT.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

#define CBTHOOKLIB extern "C" __declspec(dllexport)
#include "CBT.h"

#pragma data_seg("CBTHOOK")
HHOOK g_hHook=NULL;
#pragma data_seg()
#pragma comment(linker,"/Section:CBTHOOK,RWS")

HINSTANCE g_hinstance;

BOOL APIENTRY DllMain( HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hinstance = hModule;
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode == HCBT_ACTIVATE)
{
}

return(CallNextHookEx(g_hHook, nCode, wParam, lParam));
}

BOOL WINAPI CBT_HookAllApps(BOOL bInstall)
{

BOOL bOk;

if (bInstall) {

//ASSERT(g_hHook == NULL); // Illegal to install twice in a row

// Install the Windows' hook
g_hHook = SetWindowsHookEx(WH_CBT, CBTProc,
g_hinstance, 0);

bOk = (g_hHook != NULL);
} else {

// Can't uninstall if not installed
BOOL bResult=FALSE;
if(g_hHook)
{
bResult= UnhookWindowsHookEx(g_hHook);
if(bResult)
g_hHook=NULL;
}

}

return(bOk);
}

给段代码你参考了,可以运行的
lumei_1123 2011-03-30
  • 打赏
  • 举报
回复
MsgFilterHookProc是在dll中的,g_hInst要在dllmain中赋值的。
Lactoferrin 2011-03-30
  • 打赏
  • 举报
回复
MsgFilterHookProc要在dll中,g_hInst要是这个dll的基地址

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧