怎样获取这个菜单的句柄?

screen12 2016-12-20 11:35:50
有一个应用程序,我想操作它的菜单,可是我发现它的菜单句柄无法获取。它的菜单如下:



这个菜单本身就是一个窗口,而且是可以移动的。我用SPY++获取它的属性如下:



它的窗口类好象是什么BCG什么的,好象是一种专门的菜单。

我用通常的GetMenu无法获取它的菜单句柄,向这个窗口本身发送MN_GETHMENU,好象也无法获取它的句柄,怎么办?

我其实是想获取它的一个菜单项上有没有打对勾,但无法获取它的句柄,一切无从谈起。

怎么办?有枚举菜单的类似EnumMenu()这样的函数吗?或者有FindMenu()这样的函数吗?

...全文
1372 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
screen12 2017-01-20
  • 打赏
  • 举报
回复
引用 19 楼 wangningyu 的回复:
你查一下CBCGPMenuBar,自绘的菜单/窗口,是不能直接用MFC那套获取的
那么,我想获得某个菜单项的状态,比如是否打勾,也是不可能的了,是吗? 比如,你看上面一个贴子的图,那个"Break",前面有个咖啡杯的图标,那个可能处于选中状态(相当于普通菜单的勾),我想获取这个状态,也不太可能,是吗?
赵4老师 2017-01-20
  • 打赏
  • 举报
回复
ReadProcessMemory
汪宁宇 2017-01-03
  • 打赏
  • 举报
回复
你查一下CBCGPMenuBar,自绘的菜单/窗口,是不能直接用MFC那套获取的
「已注销」 2017-01-03
  • 打赏
  • 举报
回复
引用 6 楼 screen12 的回复:
[quote=引用 5 楼 SXJIAKE 的回复:] 这个其实是用 Rebar(工具栏)实现的菜单栏,也就是没有图标只有文字的工具栏,每个经过时加载一个菜单,所以它和工具栏性质一样,可以移动,鼠标放上去的效果也和工具栏一样的。
那能获取其中一个子菜单的句柄吗? 我的目的是:获取这个菜单项:Break 前面的咖啡图标是否被选中(大概就相当于打勾)。有办法吗? [/quote]很明显你这个极有可能也不是系统菜单。如果是系统的菜单,则项目颜色和悬停效果应该和你在其他地方看到的系统是完全一样的。这个做这么华丽,要么是他们自己实现的,要么是基于系统菜单重绘的。
赵4老师 2016-12-26
  • 打赏
  • 举报
回复
提醒:ahk是开源的。
screen12 2016-12-25
  • 打赏
  • 举报
回复
引用 15 楼 zhao4zhong1 的回复:
用ahk脚本试试看。 如果不行,用终端服务和远程终端再试试看 如果不行,用虚拟机试试看 ……
虚拟机是肯定行的 当不能用 因为我的软件是发给用户用的 不可能要求他转虚拟机 ahk能做到的 我们编程也应该能做到吧?
screen12 2016-12-23
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
搜“后台调用外部程序的完美实现(使用CreateDesktop建立隐藏桌面)”
这个我已经看过了,我就是根据这个做的虚拟桌面。 我的问题和他的不同。我的是鼠标操作,需要在虚拟桌面被隐藏(不是当前桌面)的时候,向其中一个窗口发送鼠标消息。 现在发现:这种情况下,用mouse_event模拟鼠标操作好象不行。
赵4老师 2016-12-23
  • 打赏
  • 举报
回复
搜“后台调用外部程序的完美实现(使用CreateDesktop建立隐藏桌面)”
screen12 2016-12-23
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
理论上使用autohotkey可以将任何手动操作记录为对应ahk脚本再手动修改该脚本让其自动化。
我有两个问题:一、autohotkey可不可以在对方窗口不是前端窗口的时候,向它模拟鼠标操作? 二、如果能,它是怎么做到的?那我也在我的程序中用这种方法来做到。
赵4老师 2016-12-23
  • 打赏
  • 举报
回复
用ahk脚本试试看。 如果不行,用终端服务和远程终端再试试看 如果不行,用虚拟机试试看 ……
赵4老师 2016-12-22
  • 打赏
  • 举报
回复
引用 9 楼 l357630798 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:] 理论上使用autohotkey可以将任何手动操作记录为对应ahk脚本再手动修改该脚本让其自动化。
不失为一种方法。[/quote] 然后还可以在你的代码中
WinExec("yourahk.ahk",SW_SHOW);
l357630798 2016-12-22
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
理论上使用autohotkey可以将任何手动操作记录为对应ahk脚本再手动修改该脚本让其自动化。
不失为一种方法。
赵4老师 2016-12-22
  • 打赏
  • 举报
回复
理论上使用autohotkey可以将任何手动操作记录为对应ahk脚本再手动修改该脚本让其自动化。
nicklisir 2016-12-22
  • 打赏
  • 举报
回复
根据类名构成获取,比如 名字构造:名字前缀:基址:类样式:光标:背景画笔句柄:图标句柄 (这个是MFC的命名方式)
赵4老师 2016-12-21
  • 打赏
  • 举报
回复
赵4老师 2016-12-21
  • 打赏
  • 举报
回复
screen12 2016-12-21
  • 打赏
  • 举报
回复
如果没有办法通过窗口句柄获取菜单句柄,那么能不能用象EnumMenu()或FindMenu()这样的函数,找到菜单句柄,然后判断哪一个是自己需要的呢?
screen12 2016-12-21
  • 打赏
  • 举报
回复
引用 5 楼 SXJIAKE 的回复:
这个其实是用 Rebar(工具栏)实现的菜单栏,也就是没有图标只有文字的工具栏,每个经过时加载一个菜单,所以它和工具栏性质一样,可以移动,鼠标放上去的效果也和工具栏一样的。


那能获取其中一个子菜单的句柄吗?

我的目的是:获取这个菜单项:Break 前面的咖啡图标是否被选中(大概就相当于打勾)。有办法吗?

「已注销」 2016-12-21
  • 打赏
  • 举报
回复
这个其实是用 Rebar(工具栏)实现的菜单栏,也就是没有图标只有文字的工具栏,每个经过时加载一个菜单,所以它和工具栏性质一样,可以移动,鼠标放上去的效果也和工具栏一样的。
screen12 2016-12-20
  • 打赏
  • 举报
回复
我的问题好象和这个贴子的问题是一样的,那个人也报怨菜单是CBCGPMenuBar 菜单(我的是BCGPToolBar型的,有区别?)而无法获取菜单句柄: “快要发疯了,为什么使用CBCGPMenuBar 菜单,使用GetMenu()函数返回的是0X0000000” http://bbs.csdn.net/topics/210033832 我在那个贴子里看了一下,他用的是类成员函数,而我是SDK方式编程,就是直接API编程,用类的方法我不太懂。 有办法用SDK方式用API函数获取到这种菜单的句柄吗?
加载更多回复(1)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧