|
发表于 2024-7-10 12:59:31
|
显示全部楼层
陕西省西安市
GetMenuState函数是没问题的,关键是PostMessageA只是将消息放入消息队列,实际的状态改变需要等到消息循环处理该消息。如果消息循环还没有运行到该消息,状态不会变。
测试发现,手动点开菜单栏会触发消息处理,此时再点击按钮,可看到调试消息输出的状态有变
PostMessageA(精易模块的菜单_点击也是该方式)都无法实时改变状态,需要手动点开菜单才触发消息处理
建议改用CheckMenuItem改变状态,代码如下
变量名 | 类 型 | 静态 | 数组 | 备 注 | 计次 | 整数型 | | | 菜单索引 | 整数型 | | |
窗口句柄 = FindWindowA (0, “无标题 - 记事本”) 调试输出 (窗口句柄 )菜单句柄 = GetMenu (窗口句柄 ) 调试输出 (菜单句柄 )菜单一 = GetSubMenu (菜单句柄, 3 ) 调试输出 (1, 菜单一 )菜单索引 = 0 计次循环首 (30, 计次 )调试输出 (1, 计次 - 1, 菜单_取标题 (菜单一, 计次 - 1 )) 如果真 (寻找文本 (菜单_取标题 (菜单一, 计次 - 1 ), “状态栏”, , 假) > -1 ) 菜单索引 = 计次 - 1 跳出循环 ()计次循环尾 ()菜单项目 = GetMenuItemID (菜单一, 菜单索引 ) 如果 (GetMenuState (菜单一, 菜单索引, #MF_BYPOSITION ) = 8 )CheckMenuItem (菜单一, 菜单项目, 0 )CheckMenuItem (菜单一, 菜单项目, 8 )调试输出 (“勾选状态:”, GetMenuState (菜单一, 菜单索引, #MF_BYPOSITION ))
|
|