读书人

WH_SHELL钩子有关问题

发布时间: 2012-03-15 11:50:38 作者: rapoo

WH_SHELL钩子问题
我的目的是:在别的程序启动后,我得到这个事件或消息然后开始做我的事
我的方法是用WH_SHELL钩子,代码如下:

::SetWindowsHookEx(WH_SHELL, ShellHookProc, (HINSTANCE)hDllModule, 0);

LRESULT WINAPI ShellHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HSHELL_WINDOWCREATED)
{
ClthWnd = HWND(wParam);
TCHAR szWindowText[256];
::GetWindowText(ClthWnd, szWindowText, 256);

OutputDebugString( "------------HSHELL_WINDOWCREATED------------- ");
OutputDebugString(szWindowText);
}

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

这样就可以解决问题,而且根据MSDN中HSHELL_WINDOWCREATED说明:
A top-level, unowned window has been created. The window exists when the system calls this hook.正好满足我的需求.

但测试后发现,我所测试的程序都能抓住,就QQ抓不住,显然QQ为了防止盗号做了处理
现在有2个方法
1 研究下怎么挂钩子到QQ中,也就是要研究QQ怎么防止加载全局钩子的,然后把钩子加在进去
2 用别的方法得到 "程序启动 "这个事件,但要满足要求,像MSDN中所说 The window exists when the system calls this hook
估计用第一个方法有难度,但用方法2我实在想不出除了钩子,还能用什么别的方法,大家帮帮忙啊,有别的方法 "程序启动 "这个事件吗,一定要在程序启动之后啊

[解决办法]
简单的方法,就是搞个Timer 不停的去找QQ的窗口

读书人网 >VC/MFC

热点推荐