没有源码的程序,想禁用某个菜单项,有什么方法吗?

gzwsl 2003-08-23 12:25:33
将某个MENUITEM改为不可选,或者干脆删除它,怎么做?谢谢!
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengqinggao 2003-08-23
  • 打赏
  • 举报
回复
用FindWindow()或者BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)之类的函数获取该程序的主框架句柄,然后:

CWnd *pWnd = CWnd::FromHandle(hWnd);
CMenu *pMenu = pWnd->GetMenu();
pMenu = pMenu->GetSubMenu(2);//获取计算命令所在的子菜单;
//对该菜单进行操作;
pMenu = NULL;
pWnd = NULL;

有一个问题时,如果那个程序是WORD(可能还有其他程序),用GetMenu()函数得不到它的菜单,你试一试这个能不能行。

具体可以参考:
http://expert.csdn.net/Expert/topic/2070/2070652.xml?temp=.2636835
DoItFreely 2003-08-23
  • 打赏
  • 举报
回复
SubClassWindow,拦截对菜单的初始化消息(WM_INITMENU?)
cattydid 2003-08-23
  • 打赏
  • 举报
回复
这要看你原来的菜单项是怎么做的
思危 2003-08-23
  • 打赏
  • 举报
回复
楼上的、这样都行啊
zhouyong0371 2003-08-23
  • 打赏
  • 举报
回复
//窗口的标题为DialogMenu
CWnd * pWnd = FindWindow(NULL, "DialogMenu");

if (pWnd)
{
CMenu * pMenu = pWnd->GetMenu();

if (pMenu)
{
pMenu = pMenu->GetSubMenu(0); //第一个下拉菜单
if (pMenu)
{
pMenu->EnableMenuItem(0, MF_DISABLED|MF_BYPOSITION); //第一个菜单项
}
}
}
new1mm 2003-08-23
  • 打赏
  • 举报
回复
去掉只读属性,用VC以资源方式打开可执行文件,编辑资源去掉那个菜单项,保存
fengqinggao 2003-08-23
  • 打赏
  • 举报
回复
呵呵,只能两个程序同时运行的时候才行,而且只有当次有效,如果要长期禁用,我还没有思路,:),呵呵,仅供参考吧
gzwsl 2003-08-23
  • 打赏
  • 举报
回复
对这方面不大懂,楼上的这个方法是做个壳每次都运行一次来禁用子菜单还是可以直接修改BIN?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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