Menu的窗口句柄
来源:互联网 发布:51单片机app 编辑:程序博客网 时间:2024/05/19 02:43
如果我们想要替换菜单的窗口过程的地址,必须通过Hook来截获到菜单的窗口创建消息。对于一般的创建我们只要处理了wm_create就可以了,但对于菜单我们必须截获Windows没有公开的消息:0x1e2 ,在该消息中msg.hwnd就是我们要找的菜单窗口的句柄。
获得了菜单窗口的句柄,我们就很容易进行SetWindowLong对菜单进行窗口过程回调的设置。
********************************************************************************************************************************
菜单也是窗口,窗口类名是“#32768”,不过HMenu不是窗口句柄,HMenu是菜单的一个内置结构的地址
HHOOK hhook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)myHookProc,hInstance,GetCurrentThreadId());
LRESULT CALLBACK myHookProc(int code,WPARAM wParam,LPARAM lParam)
{
CWPSTRUCT* lpcwps=(CWPSTRUCT*)lParam;
if(code==HC_ACTION)
{
int nCount;
TCHAR szClassName[100];
WNDPROC lpfnOrg;
if(lpcwps->message==WM_NCCREATE)
{
//Customize menu
if(lstrcmp(szClassName,"#32768")==0)
{
//在这里重定义Menu窗口过程(需要保存原始窗口过程)
WNDPROC lpfnOrg=(WNDPROC)SetWindowLong(lpcwps->hwnd,GWL_WNDPROC,(LONG)NewMenuProc);
//Save old wndproc to window properties
SetProp(lpcwps->hwnd,"__oldwndproc",(HANDLE)lpfnOrg);
}
}
}
}
//菜单窗口过程
LRESULT CALLBACK NewMenuProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
WNDPROC lpfnOrg=(WNDPROC)GetProp(hwnd,"__oldwndproc");
//处理相关消息
return CallWindowProc(lpfnOrg,hwnd,msg,wParam,lParam);
}
- Menu的窗口句柄
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 关于进程句柄 窗口句柄的关系
- 查找特定窗口的句柄
- 获取桌面窗口的句柄
- 获取控制台窗口的句柄
- 窗口句柄有关的常见问题
- 获取控制台窗口的句柄
- 获取控制台窗口的句柄
- 得到窗口的句柄方法
- 获取控制台的窗口句柄
- 窗口句柄的获取MFC
- 获取窗口句柄的方法
- memcache扩展(0.2版本)源代码讲解(memcache_increment)
- 黑马程序员---继承
- hibernate 调用存储过程
- 用SIP来生成C/C++/Qt库的Python绑定(三)
- Web企业应用软件知识点整理
- Menu的窗口句柄
- JSP连接数据库方法大全
- Install linux from HDD/U-Disk into HDD/U-Disk
- How to get the useful synonyms
- IOS dispatch_once
- Tomcat 6.0 设置 JNDI 数据源
- Sql Server 2005之后新增的With AS 语法,更容易实现递归
- 功能最完善的uboot
- java自定义注解