请教一个比较冷门的问题,怎样获取别的程序的菜单?
HWND hTargetWnd = Findwindow(...)
HMENU hTargetMenu = GetMenu(hTargetWnd)这样对于有些窗口是可以的``有些窗口是把菜单放在toolbar里面的``这样就取不了了。。
类似这样的方法上面的方法我试过了``不行``想请教有没有什么别的方法?

解决方案 »

  1.   

    最好是向目标注释一DLL,在其中完成。
      

  2.   

    这样是没错的.不过你少了一步.就是在使用菜单的时候先去初始化它一下.上次我也因为这个问题找了很久.最后去跟踪那个程序时才知道原来TMD的.每次在使用菜单时,它都要初始化一下.真倒.
    试试.
    SendMessage(hKing,WM_INITMENU,(WPARAM)hKingMenu,0);
      

  3.   

    楼上的``你的意思是```GetMenu后,发送WM_INITMENU消息到菜单窗口里?
      

  4.   

    还是不行``取不了toolbar里面的菜单。。
      

  5.   

    刚才看了一些文章,发现那种放在工具条里的菜单,都是按钮来的,只是程序里处理了点了按钮后,就弹出一个弹菜,这样的话,首先要拿到工具条里的每个按钮的句柄,然后再拿每个按钮弹出的菜单的hmenu,晕,太难了,有高手想到解决办法吗
      

  6.   

    搂主的意思是不是类似word的菜单?
      

  7.   

    你只可能实现在菜单弹出的时候去取,别指望通过GetMenu这种方法,因为菜单可能更本就是动态生成的(我就经常这么干),所以只需要注入进程,下个message hook,在WM_INITMENU或者WM_INITMENUPOPUP里处理就可以了.工具条模拟的主菜单要特殊处理一下.
      

  8.   

    楼上的,dll注入我早就会了,那些什么apihook,消息钩子我都会了,我看楼上的说得那么像高手的语气,能给出解决办法的方法吗?我是还没成功,我菜`靠
      

  9.   

    你说得window核心编程,可能我在看的时候``你还在学c++呢
      

  10.   

    处理TOOLBAR当然不能直接再用MENU的办法了,因地制宜,就得取到TOOLBAR,再取其中的弹菜了。既然做这类程序,“麻烦”是少不了的,但真做过了,也就不再觉得麻烦了。
      

  11.   

    楼主想必是个高手了,这个问题比较复杂,没有做过,提点想法。
    试试用全局钩子,把WM_INITMENU等的一类消息钩住,看看结果如何?