-
问题内容:** 获取别人程序的菜单句柄 获取MessageBox的句柄和提示文本 **
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5569773
- 所属论坛:基础类
审核组:VC/MFC
- 提问者:WvW
解决者:cosobin
- 感谢:cosobin wlwlxj freeman868 Mackz xjtuzhw xqk KeSummer titilima
- 关键字:VC/MFC 基础类
- 答案:
一、给定一个窗口句柄,然后获取他的菜单。
1. 使用Findwindow 找到一个程序的窗口句柄
2. 使用什么函数能获取这个程序的菜单句柄?
下列代码只适用于 记事本程序(可能只对SDI程序有效) 。
HMENU hmenu= ::GetMenu(hwnd);
二、如果一个程序,调处一个MessageBox,如何找到这个程序的这个MessageBox?
我现在是用FindWindowEx,查找这个MessageBox的类和标题,然后关闭他, 但是如果别的程序也有这样一个MessageBox弹出来了怎么办?
---------------------------------------------------------------
static CWnd* FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
hwndParent的这个参数不就是指定的某个程序吗?
不会关闭其他的吧,你只要指定这个某个CWnd
就行了。
---------------------------------------------------------------
如果前提一开始就是错误的,那就永远得不到答案。word或者maxthon的菜单其实是menubar,如果程序没有setmenu(NULL),那么你兴许可以得到他的窗口,否则你是得不到的。
---------------------------------------------------------------
顶一个再看
---------------------------------------------------------------
那你要“知道”这个菜单到底是怎么实现的?是Windows标准菜单吗?问一下编写程序的人。
---------------------------------------------------------------
根据位置操作鼠标得了
获取菜单之类的基本无法实现的,谁知道原程序的实现方式呀
也有可能就是利用几张图片模拟菜单控件,你用getmenu之类的根本无法实现
先利用spy++看一下层级的关系,然后再想办法处理吧
---------------------------------------------------------------
CreateTimerQueueTimer 找窗口句柄
---------------------------------------------------------------
只有关联到window的menu才能用GetMenu,而word那个不是标准的菜单来的,这点我以前做过了.
---------------------------------------------------------------
> 我需要模拟点击“计算尺度”这个菜单,如何做到?
找到这个菜单项的id,向所有者窗口发送WM_COMMAND消息即可。
第二个问题,可以调用GetWindowThreadProcessId获取窗口所在进程的ID。
------------------------------------------------------
揭帖
第一个问题; 已经无法解决了, 最终通过 SPY去捕捉 WM_COMMMAND 消息,得到ID号.
第二个问题: 通过枚举窗口,找到同样的标题, 然后对比父亲窗口的 进程ID, 来找到这个messagebox.
第3个问题: 获取dephi的TMessageFrom类的提示文本是不可能了, 因为他不是一个窗口(控件)显示提示信息的, 他通过TextOut (ExtTextOut) 画出来的文本, 只能通过钩API来做到. 太麻烦,没有做了.
谢谢大家!
- 评价:
给朵鲜花(3)
扔个鸡蛋(1)