首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么用全局钩子,怎么拦截指定的菜单消息?

2012-03-26 
如何用全局钩子,如何拦截指定的菜单消息?????请教!用全局钩子,如何拦截指定的菜单消息。比如拦截右键- 新

如何用全局钩子,如何拦截指定的菜单消息?????
请教!
用全局钩子,如何拦截指定的菜单消息。
比如拦截右键-> 新建消息。
菜单拦截:我的DLL源码如下:

#include   <windows.h>
HHOOK   myHook;
LRESULT   CALLBACK   MENU_Process(int   nCode,   WPARAM   wParam,   LPARAM   lParam)
{
        CWPSTRUCT   *p=(CWPSTRUCT   *)lParam;
        if(p-> message==   WM_MENUSELECT)
        {
   
        }
return   CallNextHookEx(myHook,nCode,wParam,lParam);
}

void   MySetHook()
{

  myHook=SetWindowsHookEx(   WH_CALLWNDPROC,     MENU_Process,   GetModuleHandle( "MenuHook "),   0     );

}

[解决办法]
你应该拦截WM_COMMAND消息.
[解决办法]
帮你查了一下,你可以试试,我没测试过,不知道正确与否。
LRESULT CALLBACK MENU_Process(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *p=(CWPSTRUCT *)lParam;
if(p-> message== WM_COMMAND)
{
wmId = LOWORD(wParam);
switch (wmId)
{
case ID号:
break;
}

}
return CallNextHookEx(myHook,nCode,wParam,lParam);
}

[解决办法]
菜单消息是WM_COMMAND,再用wParam来确定是哪个菜单项
[解决办法]
第一个菜单项ID为0,下面依次递增1
[解决办法]
菜单就好比楼层,
从左到右,0,1,2
从上到下,0
1
2

热点排行