hook搜狗浏览器时,回调函数没有被调用,而同种方法hookIE就行的通?
我用了几种钩子类型(头2种, DEBUG,鼠标,鼠标LL)都试过了,都没有成功。请高手能告诉我为啥没成功的原因。
如果能提供怎么hook搜狗浏览器的方法就更感激不尽了。
我用了几种钩子类型(头2种, DEBUG,鼠标,鼠标LL)都试过了,都没有成功。请高手能告诉我为啥没成功的原因。
如果能提供怎么hook搜狗浏览器的方法就更感激不尽了。
其他程序你只要hook其中一个线程窗口,其他窗口也会被hook,但搜狗不是这样。
已hook搜狗的主窗口后,只能接收搜索栏和工具栏的消息。不能接收里面的主视图消息。
需要再明确的获得主视图的窗口句柄,再hook就可以了。
http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC/Hook-sogo-explorer.zip
主页面窗口层如下:
SE_AxControl
\Shell Embedding
\Shell DocObject View
\Internet Explorer_Server
好像是一个标签一个进程。
用SPY++明明能监视到,为啥用HOOK就到不了回调函数呢?是不是他也用钩子了,在链表最前面把我的截断了?
求高手鉴定一下。
SetMouseHook(FindWindow(“搜狗窗口类名”,NULL) )
hook框架你可以这样修改。
找主窗口 HWND MainWnd= FindWindow(“搜狗窗口类名”,NULL)
接着再找主窗口下的子窗口具有“Internet Explorer_Server”列名的那个就是主视图了。
再调用 SetMouseHook( 主视图窗口句柄 ) 就可以了下面的函数也许有用。阿弥陀佛!/****************************************************************************
寻找指定类名的子窗口句柄 方法一
****************************************************************************/
static
HWND FindWithClassName(HWND ParentWnd,const TCHAR* FindClassName)
{
HWND hChild = ::GetWindow(ParentWnd, GW_CHILD); TCHAR ClassName[100];
for(; hChild!=NULL ; hChild=::GetWindow(hChild,GW_HWNDNEXT))
{
::GetClassName(hChild,ClassName,sizeof(ClassName)/sizeof(TCHAR)); if (_tcscmp(ClassName,FindClassName)==0)
return hChild;
HWND FindWnd=FindWithClassName(hChild,FindClassName);
if (FindWnd)
return FindWnd;
}
return NULL;
}/****************************************************************************
获取主窗口下某个子窗口的窗口句柄
参数1:最顶层父窗口
参数2:控件ID,可使用spy++(VS2008版本) 查看
****************************************************************************/
static
HWND FindControlWnd(HWND ParentWnd,DWORD ControlID)
{
HWND hChild = ::GetWindow(ParentWnd, GW_CHILD); for(; hChild!=NULL ; hChild=::GetWindow(hChild,GW_HWNDNEXT))
{
//判断是否为需要的控件
if ( GetDlgCtrlID(hChild) == ControlID )
return hChild; HWND FindWnd=FindControlWnd(hChild,ControlID);
if (FindWnd)
return FindWnd;
}
return NULL;
}
我现在的问题好像不是hook不到搜狗的页面,而是hook成功后,并没有调用我得回调函数。困惑中。