不用给分我,只是提出一个建议:如果这个问题能够解决,请ZDG找人整理一下有关资料,在CSDN发表。

解决方案 »

  1.   

    漏提了一点,我要求的比perfect menu hook全部要麻烦一些,我只需要hook有复制粘贴的菜单项,当然能实现perfect menu的功能我就会给分。
      

  2.   

    当然是1200,hehe,zdg坛主限制我一次最高出到300,四次付清:)
    不过要快一点哦,我现在已找到了16位for win31下的hook other application menu源码。
      

  3.   

    用鼠标钩子截获全部右键信息较易;
    再捕捉右键菜单窗口如何做,尚未弹出就应加入item
      

  4.   

    好像也不是很困难,有点门道了:)
    1.hook mouse right click
    2.windowfrompoint ->hwnd
    3.hook wm_initmenu.
    我再试试看
      

  5.   

    这道题和我去年六月份在另一个软件论坛上谈论的屏幕取词技术大同小异,实际上就是截获系统Dll并修改入口地址。
    在“Undocumented Windows"之类的书中不是有source code吗?
    当时我曾经专门写e-mail给Matt Pietrek询问这类技术,结果他告诉我他对此类技术并不感兴趣,或许他在Microsoft System Journal上所解答的问题才比较高深吧。 
      

  6.   

    如果我按win95键盘的应用程序键来激活菜单怎么办?
    是否可以Hook窗口的Message呢?
      

  7.   

    1.用鼠标钩子截获全部右键信息
    2.截获TrackPopupmenu/TrackPopupmenuEx 函数
    3.添加 Menu
    4.继续 TrackPopupmenu/TrackPopupmenuEx
    ----------------
    只是如何截获API函数,是一个难点,
    我在CSDN 上也有一个相同的问题,没有人可以解答。
    不过,你要截获的是 Windows API,因该比较简单,
    (由于使用钩子函数,映射到Application 线程里,可以修改该APP 的 PE)
    可以看看MS 的 detours,还可以看看 bo2k 的 source
    会有一点启发的。
      

  8.   

    solomon先生:
    哪里有bo2k 的 source和
    MS 的 detours
      

  9.   

    多谢各位。
    solomon:去年我的想法是截获api,但用apiload察看时不知何故点击右键找不到TrackPopupmenu/TrackPopupmenuEx,我已在msdn找到加入other application system menu的源代码,是截获wm_initmenu消息,现在的任务只是区分是否context menu了。
    to:zjy MS 的 detours source在easyp.soim.net可找到
      

  10.   

    不过我觉得截获记事本的右键菜单有困难,
    因为我用spy++跟踪发现它的菜单的弹出
    没有wm_initmenupopup消息。
      

  11.   

    谢谢hubdog,大概需要截获wm_contextmenu消息喽
      

  12.   

    to:zjy bo2k 在http://www.bo2k.com/indexdownload.html
      

  13.   

    这个问题还是比较麻烦,WM_CONTEXTMENU没有传递menu,而我用apispy察看notepad中也没有TrackPopMenu和TrackPopMenuEx,难道还有什么未公开的api弹出menu。
    谁有Softice 4.01的注册码,请帖给我,好久没玩Softice了,看来需要trace一下。
      

  14.   

    you can use the mousehook get the menu information.
    next get the information's content.
    add your menu into the content.
    use "repaint the canvas" paint the menu into Canvas.
      

  15.   

    hook mouse 的什么消息可以得到Menu的信息,可否说的详细一些,谢谢。
      

  16.   

    关键是要找到100%搞定,每个right button menu 都必须的消息,hook.
    得要好好查一下。
      

  17.   

    消息倒有,wm_contextmenu,但是它不传递menu的信息,我找不到入口修改。
    我用SoftICE追踪notepad,发现它不调用TrackPopupMenu和TrackPopupMenuEx,难道有Undocument API弹出菜单 
      

  18.   

    谁有Softice 4.01的注册码,请帖给我,好久没玩Softice了,看来需要trace一下。(FOr NT),谢了。
      

  19.   

    关键在于修改TrackPopupMenu\TrackPopupMenuEx函数,与屏幕取词一个道理。
    不能用HOOK WM_INITMENU,WM_INITPOPUPMENU等,因为如果那样的
    话,必须判定MENU是什么样的MENU,不一定是右建菜单。Perfect Menu 带有一个动态库,叫*hook*.dll,利用他或许能完成你的
    任务我这里有一个屏幕取词的源码,可惜是BC的,他用了几个关键的宏在VC里是找不到
    的,我没时间仔细研究它,如果你要,我可给你。
      

  20.   

    多谢,我手里已有不少hook api的例子及文档,hook TrackPopupMenu\TrackPopupMenuEx并非技术难点。我的问题是,notepad中并未调用这两个Api。而且TrackPopupMenu\TrackPopupMenuEx也并非右键菜单专属的,同样需要监测是否传递了WM_CONTEXTMENU消息来区分右键左键
      

  21.   

    今日用Softice跟踪一下,发现老外玩了个虚的,他没有得到hmenu,只是find弹出菜单的window,然后再画他自己的窗口,这样看起来,Jackzhu先生将获得1200分,多谢各位朋友关注本问题。
    虽然还是没有找到notepad弹出菜单的函数,但我的问题已有解决思路了。