如题,
例如我要取得 打开... 菜单的句柄
同样,如何取IE的菜单句柄

解决方案 »

  1.   

    Word 的菜单不是直接存在于Word的主窗口中,而是在子窗口中,
    下面的代码验证了这一点:
    ------------------------------------------------------
    var
      hWord, hCommandDock, hCommand: HWND;
    begin
      // Word 的窗口
      hWord := FindWindow( 'OpusApp', nil ); 
      // 上部的菜单、工具栏部分
      hCommandDock := FindWindowEx( hWord, 0, 'MsoCommandBarDock', 'MsoDockTop' );
      // 菜单栏
      hCommand := FindWindowEx( hCommandDock, 0, 'MsoCommandBar', '菜单栏' );
    ------------------------------------------------------理论上GetMenu的参数应该是 hCommand, 但GetMenu不支持对子窗口的调用。
    下面是MSDN原文:
    The return value is a handle to the menu. If the specified window 
    has no menu, the return value is NULL. If the window is a child 
    window, the return value is undefined. 
      

  2.   

    不是指取菜单栏,我要取菜单项
    菜单栏用EnumChildWindows可以找到,但再Enum不出菜单项了
    像放在工具条中的菜单,如IE的,都找不到名柄
      

  3.   

    H:=GetSubMenu(H,2); 得到第3个子菜单句柄
      

  4.   

    老大,请测试一下好吗?
    我现在连主菜单的句柄都找不到,怎么能GetSubMenu???Word的菜单与众不同(我是Office XP)
    工具栏上的菜单项,如文件菜单项的隶属关系是
    OpusApp  (WORD应用程序)
    MsoCommandBarDock  (停靠的地方)
    MsoCommandBar  (工具栏菜单项)而下拉的菜单竟然直接隶属于WORD应用程序???!!!!!
    OpusApp  (WORD应用程序)
    MsoCommandBarPopup  (弹出菜单项,如文件中的打开...)而IE中的菜单(就是我的电脑)更牛了
    主菜单的隶属关系是
    CabinetWClass  (我的电脑)
    WorkerW   (未知,应是工具栏的停靠控件吧)
    ReBarWindow32  (工具栏)
    ToolBarWindow32  (主菜单,如文件)文件中的新建菜单类名是
    #32768
    竟然没有父窗口???!!!晕倒我该怎么取出来???
      

  5.   

    使用ole,word Application很容易搞定的!
      

  6.   

    事情没有想像的那么简单
    我并不只想取得WORD和IE的菜单句柄,还有其它所有未知应用程序的菜单句柄我用EnumChildWindow枚举所有子窗体,用GetMenu取得菜单,但像上面的情况,
    我应该用什么方法取得句柄呢?不止菜单,像上面的ToolBarWindow32中的按钮
    的句柄也取不到!不可能所有用ToolBarWindow32控件的应用程序都提供接口吧回答正确者在大富翁里可再得300分
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1614265
      

  7.   

    你有没有用SPY++看一下那个按钮有没有HANDLE值??!
      

  8.   

    我能用SPY++或WindowFromPoint函数找到菜单的句柄(但工具栏上的按钮找不到句柄),菜单项的从属关系也知道(上面已经列出来了),但是我没有办法根据它的父来枚举出所有项目,而这是我想达到的功能,菜单还好办,能得到句柄(WORD的菜单不是WINDOWS的MENU类,IE的好象也不是,还没试验),但工具栏按钮就根本得不到句柄,别说根据父类枚举出它们了.
    to 阿木
      其实你不用问,自己试试就知道了,SPY++枚举子窗口的功能我已实现,其实很简单,就是它也不知道怎么得到这些句柄,从WORD应用程序的句柄开始,它只能得到工具栏等的句柄,而不能得到菜单句柄和工具栏按钮的句柄,你用一下SPY++会发现一个WORD应用程序的结构很简单,而实际上是它根本没有办法得到详细的信息.
      

  9.   

    既然得不到菜单类
    那你得到的MENU的handle是什么东东
    如果你想做个通用的取菜单的东西
    恐怕得分开来判断才行
    有不少软件都不是直接封装的MENU类
    自己用别的方法实现的菜单
    有一个函数ismenu用来判断它是不是一个菜单
    如果你取得根本不是菜单那没用了
      

  10.   

    到这里看看,我已做好了。
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1435428
      

  11.   

    楼上的不符合要求.
    好吧,现在放弃取WORD菜单的想法了,但还想取IE的菜单,相信应该有办法吧
    注意,我是要根据窗口的句柄取出其菜单句柄!
    还有,到底工具栏中的按钮有没有句柄?有没有人取到过?
      

  12.   

    试试DDE、OLE等东东,有事很管用的。