CSDN=>FAQ=>FAQ 展示
  • 问题内容:** 获取别人程序的菜单句柄 获取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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo