to merlin_jn(墨林) : 你说“有的程序会直接调用某个窗口的处理过程”,这是对的。如果在线程内部用SendMessage发送消息,的确会这样。但这并不代表用钩子钩不到这个消息啊。你可以看看WH_CALLWNDPROC钩子,MSDN对这个钩子的钩子函数是这样解释的:The system calls this function whenever the thread calls the SendMessage。就是说这样发送的消息也是可能被钩到的。
to webber84(糕鱼昏): 你说的很清楚了,我这就去试验一把,那我用下面那个类型的钩子? 1.WH_CALLWNDPROC 2.WH_CALLWNDPROCRET 3.WH_CBT 4.WH_GETMESSAGE 5.WH_MSGFILTER 6.WH_SYSMSGFILTER 还有些一看就没法用的没写出来,6个钩子类型搞得我晕头晕脑的.呵呵
如果消息都是经过windows消息队列才被分发到某个
该接收这个消息的程序里吗?
鼠标移动产生mouse move消息,程序拿到消息后,检测此鼠标坐标在某控件
里,某控件需要显示tooltip,显示tooltip的TTN_NEEDTEXT消息总不可能通过
hook拿到吧? 都是个人猜想,错了别笑话!
做一个全局的钩子 必须再DLL中才能捕捉到系统的所有消息
//like
BOOL CMyFormView::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom;
if (pTTT->uFlags & TTF_IDISHWND)
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
if(nID)
{
pTTT->lpszText = MAKEINTRESOURCE(nID);
pTTT->hinst = AfxGetResourceHandle();
return(TRUE);
}
}
return(FALSE);
}
你看一下MSDN吧。这个信息是由WM_NOTIFY产生的。
不要以为所有的东西都是消息!!
那我的问题如何能做到呢?
我捕捉所以的WM_NOTIFY?然后分析某些WM_NOTIFY是我需要的,
那里有足够引起TTN_NEEDTEXT的信息吗?还是只有简单
信息,由处理此消息的程序来添加足够的信息来处理呢?问题我说的都累,哈哈.上面回答问题的同志们谢谢,你们一定都有
分了
你说“有的程序会直接调用某个窗口的处理过程”,这是对的。如果在线程内部用SendMessage发送消息,的确会这样。但这并不代表用钩子钩不到这个消息啊。你可以看看WH_CALLWNDPROC钩子,MSDN对这个钩子的钩子函数是这样解释的:The system calls this function whenever the thread calls the SendMessage。就是说这样发送的消息也是可能被钩到的。
你说的很清楚了,我这就去试验一把,那我用下面那个类型的钩子?
1.WH_CALLWNDPROC
2.WH_CALLWNDPROCRET
3.WH_CBT
4.WH_GETMESSAGE
5.WH_MSGFILTER
6.WH_SYSMSGFILTER
还有些一看就没法用的没写出来,6个钩子类型搞得我晕头晕脑的.呵呵