首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WH_SHELL钩子有关问题

2012-03-15 
WH_SHELL钩子问题我的目的是:在别的程序启动后,我得到这个事件或消息然后开始做我的事我的方法是用WH_SHEL

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的窗口

热点排行