提个HOOK问题,关于SetWindowsHookEx失败的原因!

ChocoboY 2004-10-13 05:25:41
//ScrollHook.h

// 此类是从 ScrollHook.dll 导出的
class SCROLLHOOK_API CScrollHook {
public:
CScrollHook(void);
~CScrollHook(void);
// TODO: 在此添加您的方法。
BOOL StartHook(HWND hwnd);
BOOL StopHook();
friend LRESULT WINAPI MsgProc(int nCode, WPARAM wParam, LPARAM lParam);
};

//ScrollHook.cpp

CScrollHook::CScrollHook()
{
g_iRef++;
return;
}

CScrollHook::~CScrollHook()
{
g_iRef--;
StopHook();
}

BOOL CScrollHook::StartHook(HWND hwnd)
{
if (!g_ScrollHook)
g_ScrollHook = SetWindowsHookEx(WH_MSGFILTER, MsgProc, g_hInstance, 0, NULL));
//DWORD e = GetLastError();
if (!g_ScrollHook) {

return FALSE;
}
g_hWndHook = hwnd;
return TRUE;
}

BOOL CScrollHook::StopHook()
{
BOOL bResult = FALSE;
if ((g_iRef == 0) && g_ScrollHook)
{
bResult = UnhookWindowsHookEx(g_ScrollHook);
if (bResult)
{
g_hWndHook = NULL;
g_ScrollHook = NULL;
}
}
return bResult;
}


当运行UnhookWindowsHookEx后, 再次SetWindowsHookEx就失败了(返回的HHOOK为0),GetLastError返回的是0,
不理解ing
...全文
90 点赞 收藏 4
写回复
4 条回复
ChocoboY 2004年10月14日
UnhookWindowsHookEx(g_ScrollHook);返回真值了。会没卸载完全么?而且我测试了下,HOOK效果也消失了
回复 点赞
Mr-Chen 2004年10月14日
确保你的UnhookWindowsHookEx卸载掉了
回复 点赞
dropingleaf 2004年10月13日
一看到代码就头晕
回复 点赞
kugou123 2004年10月13日
可能第一次的钩子没有完全卸栽,然后再次安装,就有可能出错。
回复 点赞
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

6376

社区成员

4.9w+

社区内容

VC/MFC 进程/线程/DLL
社区公告
暂无公告