* 公司2个牛人(8年VC经验)都没有解决的有关问题, 你能搞定吗? *

** 公司2个牛人(8年VC经验)都没有解决的问题, 你能搞定吗? **

一、给定一个窗口句柄,然后获取他的菜单。

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。