如何往已经编译的执行程序中加个菜单? ( 积分: 100 )

  • 主题发起人 主题发起人 小伲
  • 开始时间 开始时间
能给我发一个吗,学习学习,谢了!!<br>yangxr1@sohu.com
 
用Hook来实现,很Easy的
 
TO:flamboyant<br>能说具体一点吗??
 
各位等一两天,我在盒子上发布。
 
做一个全局的WH_CBT类型的Hook,监听HCBT_CREATEWND或HCBT_ACTIVATE类型的消息,判断是不是你要求的哪个窗体,如果是则在菜单上增加一个菜单,并指定菜单OnClick事件的处理函数。(我只监听过destroy事件,窗体打开事件应该是监听上面两个消息之一吧 )
 
发消息创建
 
加菜单项不难 但是要给它加上点击响应功能就麻烦了<br>可以用鼠标钩子来实现
 
各位,我刚盒子上发布了自己的demo,估计明天会发布的。不过没有预期那样好的效果,但核心代码值得一看,供大家参考。
 
给你个想记事本里加菜单的例子,希望对你有所帮助:<br><br>procedure Tfrm_Main.FormCreate(Sender: TObject);<br>var<br> &nbsp;v_HWND: HWND;<br> &nbsp;v_HMENU,v_SUBMENU: HMENU;<br>begin<br> &nbsp;v_HWND := FindWindow(PChar('Notepad'),nil);<br> &nbsp;if v_HWND&amp;lt;&amp;gt;0 then<br> &nbsp;begin<br> &nbsp; &nbsp;v_HMENU := GetMenu(v_HWND);<br> &nbsp; &nbsp;if v_HMENU&amp;lt;&amp;gt;0 then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;v_SUBMENU := GetSubMenu(v_HMENU,0);<br> &nbsp; &nbsp; &nbsp;InsertMenu(v_SUBMENU, 0, MF_BYPOSITION, WM_NEWITEM1,'项目1');<br> &nbsp; &nbsp; &nbsp;//如何给这个新加的菜单项加入点击响应事件?<br> &nbsp; &nbsp;end;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;Application.MessageBox('记事本没有打开','提示',MB_OK+MB_ICONINFORMATION);<br>end; &nbsp;<br><br>
 
alisha的做法只能增加一个菜单,但不能响应任何消息。要相应消息据我所知只能做钩子。
 
后退
顶部