用HOOK将自己的菜单加到第三方软件的右键菜单上,如何响应自己的菜单事件?

cz3w 2006-02-23 11:14:35
用HOOK将自己的菜单加到第三方软件的右键菜单上后,如何响应自己的菜单事件?
#include <afx.h>
#include <Windows.h>


#ifndef IDM_GRAPHINFO
#define IDM_GRAPHINFO 40005
#endif

HHOOK g_hMouse=NULL;
HHOOK hHook=NULL;
HWND hMenuWnd;
//HHOOK g_hKeyboard=NULL;

#pragma data_seg("MySec")
HWND g_hWnd=NULL;
char strWord[200]={0} ;
#pragma data_seg()

//#pragma comment(linker,"/section:MySec,RWS")
/*
HINSTANCE g_hInst;

BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
g_hInst=hinstDLL;
return TRUE;
}
*/





typedef struct tagMENUBARINFO {
DWORD cbSize;
RECT rcBar;
HMENU hMenu;
HWND hwndMenu;
BOOL fBarFocused:1;
BOOL fFocused:1;
} MENUBARINFO, *PMENUBARINFO;


typedef BOOL (FAR PASCAL * FUNC1)(
HWND hwnd,
LONG idObject,
LONG idItem,
PMENUBARINFO pmbi
);

BOOL GetMouseInWindowsText(LPSTR s)
{
strcpy(s, strWord);

return TRUE;
}


WNDPROC MenuProc;





// 浮点数输入框的子类化窗口过程
LRESULT CALLBACK ProcMenu(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
//
// FILE *pFile=fopen("c:\\1.txt","w");
// fwrite(" OK!!! ",1,400,pFile);
// fclose(pFile);

if(LOWORD(wParam)==IDM_GRAPHINFO)
{

//此处不执行

return 1;


}
else
{
// 如果是其它消息,则调用原有的窗口过程
return CallWindowProc(MenuProc, hWnd, Msg, wParam, lParam);
}

}


LRESULT CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT cwps;


if( nCode == HC_ACTION )
{
CopyMemory(&cwps, (LPVOID)lParam, sizeof(CWPSTRUCT));

switch(cwps.message)
{
case WM_CREATE:
{
... }
break;

case WM_INITMENUPOPUP:
{

....
AppendMenu(mbar.hMenu,MF_BYCOMMAND | MF_STRING ,40002,"调用图档");

}
break;

case WM_COMMAND:
{


MenuProc = (WNDPROC)SetWindowLong(cwps.hwnd, GWL_WNDPROC, (LONG)ProcMenu);



}
break;
}

}

return CallNextHookEx((HHOOK)WH_CALLWNDPROC, nCode, wParam, lParam);
}



void UnHook()
{
UnhookWindowsHookEx(hHook);
}


void SetHook(HWND hwnd)
{
g_hWnd=hwnd;

hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, GetModuleHandle("Hook"),0);

}



...全文
304 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
布学无数 2006-04-22
  • 打赏
  • 举报
回复
使用 SetWindowLong 设置新的回调函数(当然,新回调函数是自己写的),这样就能抢先处理来自窗口的所有消息了。
verybigbug 2006-04-21
  • 打赏
  • 举报
回复
用setwindowlong
huofen2005 2006-04-19
  • 打赏
  • 举报
回复
期待答案...
cz3w 2006-03-03
  • 打赏
  • 举报
回复
响应事件是在钩子dll里,用远程线程说不定能解决
mythay 2006-02-24
  • 打赏
  • 举报
回复
那么你的响应事件是在那个地方,钩子dll里还是自己的程序内呢,这很有关系
rageliu 2006-02-24
  • 打赏
  • 举报
回复
将自己的东东加进vc里面去的例子!可以看看

http://www.vckbase.com/document/viewdoc/?id=605
cz3w 2006-02-23
  • 打赏
  • 举报
回复
菜单可以加上去,但不知如何响应菜单事件...

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧