关于钩子函数的一个问题 大家我们都知道钩子可以沟本线程的程序 和全局的我想问下 就是如何钩住外部程序的过程就是我获取了一个外部程序的句柄后 能否把这个句饼传给钩子过程 让他处理 谢谢请给点思路还有个问题 就是CWND* 指针如何转为 HWND句柄 反向又如何转 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CWnd类有个成员变量就是窗口handle要hook外部程序的过程,那就是Function Hook了,和Windows Hook不是一回事,可以google一下API Hook相关的内容 "就是CWND* 指针如何转为 HWND句柄" :由CWnd获取HWnd就容易多了,因为它的一个成员m_hWnd就是所对应窗口的句柄。CWnd->m_hWnd,或者HWND=CWND->GetSafeHwnd()反过来: CWnd *pWnd = CWnd::FromHandle(hWnd); _declspec(dllexport) BOOL StartHook(HWND hWnd){ DWORD threadid=GetWindowThreadProcessId(hWnd,NULL); trace(threadid); if (threadid==0) { ::MessageBox(NULL,TEXT("wrong thread"),NULL,MB_OK); return false; } //SetWindowsHookEx 第3个参数是自己的dll,第4个参数是想要勾住的线程ID g_hMessage=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle("OneFileDll.dll"),threadid); if (g_hMessage) return true; else { g_hMessage=NULL; return false; }}还有参考文档:也许对于初学太深奥了,但留着以后有用把这里有个例子,很不错。含代码 中英文 文档http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95.zip 这不是挺简单的嘛,3楼已经说了一种方法,还一种可以定义一个CWnd对象,调用它的Attach( hwnd ),但操作完成后记得调用Detach(),不然对象的释构函数会尝试去销毁窗口; 如何在基于对话框的应用程序中动态创建单文档窗口? IO操作中,是否有可能做到强制让Windows写缓存而不写硬盘? 一般重绘窗口文本怎么获取? 问个问题, LB_ERR 是什么啊? 它哟什么用.. 如何编写基于com技术的进度条组件 使用完成端口怎么样判断一个已经连接上的socket的关闭 有条叫“搜狐”的狐狸生了个仔,是条狗,叫“搜狗” 怎样实现ATL生成的结构体被其他语言使用? 如何像Delphi/VB那样点一个按扭,弹出另一个窗体? 如何找到每次开机后启动后修该IE属性的程序 头文件包含出错 Protecting level和Application level的概念到底是什么意思?
由CWnd获取HWnd就容易多了,因为它的一个成员m_hWnd就是所对应窗口的句柄。
CWnd->m_hWnd,或者
HWND=CWND->GetSafeHwnd()反过来:
CWnd *pWnd = CWnd::FromHandle(hWnd);
{
DWORD threadid=GetWindowThreadProcessId(hWnd,NULL);
trace(threadid);
if (threadid==0)
{
::MessageBox(NULL,TEXT("wrong thread"),NULL,MB_OK);
return false;
}
//SetWindowsHookEx 第3个参数是自己的dll,第4个参数是想要勾住的线程ID
g_hMessage=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle("OneFileDll.dll"),threadid);
if (g_hMessage)
return true;
else
{
g_hMessage=NULL;
return false;
}
}还有参考文档:也许对于初学太深奥了,但留着以后有用把
这里有个例子,很不错。
含代码 中英文 文档
http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95.zip
但操作完成后记得调用Detach(),不然对象的释构函数会尝试去销毁窗口;