CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

高难问题:A软件如何才能知道B软件的一级菜单项"搜索(S)"下面的二级菜单项"结束(E)"是处于可用还是不可用?

楼主imur05()2005-05-18 01:56:24 在 VB / 基础类 提问

请教! 问题点数:50、回复次数:6Top

1 楼cxbkkk(本命年,旺啊!)回复于 2005-05-18 10:56:00 得分 5

可以用一个模块,其中定义存放状态的,如果你要对多个菜单的话这个是个笨办法,不过只针对这一个还可以,呵呵。  
   
  只针对这个E菜单还可以,让b程序向某个文件发送0或者1,如果不可用就发送0,可用就发1,A程序需要知道E可用不可用的时候来读取,如果为0则不可用,1为可用。Top

2 楼rainivy(天涯远不远?-----不远。人已在天涯,天涯又怎么会远?)回复于 2005-05-18 11:35:15 得分 30

首先你要得到B软件的句柄,然后:  
  Option   Explicit  
  Private   Declare   Function   GetMenu   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long  
  Private   Declare   Function   GetSubMenu   Lib   "user32"   (ByVal   hMenu   As   Long,   ByVal   nPos   As   Long)   As   Long  
  Private   Declare   Function   GetMenuState   Lib   "user32"   (ByVal   hMenu   As   Long,   ByVal   wID   As   Long,   ByVal   wFlags   As   Long)   As   Long  
  Private   Const   MF_BYPOSITION   =   &H400&  
  Private   Const   MF_DISABLED   =   &H2&  
  Private   Const   MF_GRAYED   =   &H1&  
  Private   Const   MF_BYCOMMAND   =   &H0&  
   
  Private   Sub   Command1_Click()  
  Dim   hMenu   As   Long  
  Dim   hSubMenu1   As   Long  
  Dim   MenuState   As   Long  
   
  hMenu   =   GetMenu(B软件的句柄)  
  hSubMenu1   =   GetSubMenu(hMenu,   "搜索(S)"菜单的位置)  
  MenuState   =   GetMenuState(hSubMenu1,   "结束(E)"菜单的位置,   MF_BYPOSITION)  
  If   (MenuState   And   MF_DISABLED   =   MF_DISABLED)   Or   (MenuState   And   MF_GRAYED   =   MF_GRAYED)   Then  
          MsgBox   ""结束(E)"菜单禁能"  
  Else  
          MsgBox   ""结束(E)"菜单使能"  
  End   If  
  End   Sub  
   
  以上程序在VB6.0   +   Window2000   Pro版上通过Top

3 楼imur05()回复于 2005-05-18 12:21:22 得分 0

谢谢楼上二位大侠的指点!  
  To   cxbkkk(Cxbkkk)大侠:B软件是别人开发的,没有办法去让它发信息,我只能想怎么用A软件去做。请问能不能帮我想想?谢谢先!  
  To     rainivy(Rain)   大侠:您的办法很好,只是有几个问题不明白:  
  (1)hMenu   =   GetMenu(B软件的句柄)----------“B软件的句柄”怎么得到?我是在A软件用shell打开B软件的,只是知道B软件的PID,至于它的句柄怎么得到?是不是B软件的主窗口的句柄?  
  (2)hSubMenu1   =   GetSubMenu(hMenu,   "搜索(S)"菜单的位置)-------"搜索(S)"菜单的位置:这个怎么才能得到?请教!!!  
  MenuState   =   GetMenuState(hSubMenu1,   "结束(E)"菜单的位置,   MF_BYPOSITION)----"结束(E)"菜单的位置:这个怎么才能得到?请教!!!  
   
  也请各位进来的达人指点一下!!!  
   
  Top

4 楼rainivy(天涯远不远?-----不远。人已在天涯,天涯又怎么会远?)回复于 2005-05-18 13:13:38 得分 0

(1):hMenu   =   GetMenu(B软件的句柄)----------“B软件的句柄”怎么得到?我是在A软件用shell打开B软件的,只是知道B软件的PID,至于它的句柄怎么得到?是不是B软件的主窗口的句柄?  
  >>是你要得到B软件菜单的父窗口,一般就是主窗口,你可以用FindWindow得到  
  (2):hSubMenu1   =   GetSubMenu(hMenu,   "搜索(S)"菜单的位置)-------"搜索(S)"菜单的位置:这个怎么才能得到?请教!!!  
  >>一般来讲,位置是从0开始计数,比如你窗体有两个菜单“文件”“编辑”,此时“文件”的位置就是0,“编辑”的位置就是1  
  (3):MenuState   =   GetMenuState(hSubMenu1,   "结束(E)"菜单的位置,   MF_BYPOSITION)----"结束(E)"菜单的位置:这个怎么才能得到?请教!!!  
  >>同(2)的答案。Top

5 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-05-18 13:36:52 得分 15

Private   Declare   Function   FindWindow   Lib   "user32"   Alias   "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   lpWindowName   As   String)   As   Long  
   
  Private   Sub   Command1_Click()  
  Dim   lngFrmHwnd   As   Long  
   
  lngFrmHwnd   =   FindWindow(vbNullString,   "Form1")     '找到窗口标题为Form1的窗口  
   
  Debug.print   lngFrmHwnd  
   
  End   SubTop

6 楼imur05()回复于 2005-06-18 00:06:04 得分 0

到现在才研习完上面二位大侠的代码,唉!真是笨!  
   
  再一次感谢!!!  
   
  结贴!Top

相关问题

  • 关于菜单项
  • 菜单项错位
  • 菜单项控制
  • 动态建立菜单项
  • 去掉菜单项出错?
  • 如何禁止菜单项
  • 动态添加菜单项
  • 怎样获取菜单项?
  • 怎样给菜单项前加图标?
  • 如何动态创建菜单项?

关键词

  • 软件
  • 文件
  • 句柄
  • 菜单
  • b软件
  • menustate
  • hsubmenu
  • mf
  • hmenu
  • longprivate

得分解答快速导航

  • 帖主:imur05
  • cxbkkk
  • rainivy
  • DooDu

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo