Dll 窗口子类化终止外部应用程序
我正在尝试将外部应用程序的菜单子类化。我正在使用SetWindowLong函数对Windows过程进行子类化,它工作得很好,但在完成我想要的操作后,它终止了应用程序,我不知道为什么 这是我注入的函数:Dll 窗口子类化终止外部应用程序,dll,window,code-injection,subclassing,Dll,Window,Code Injection,Subclassing,我正在尝试将外部应用程序的菜单子类化。我正在使用SetWindowLong函数对Windows过程进行子类化,它工作得很好,但在完成我想要的操作后,它终止了应用程序,我不知道为什么 这是我注入的函数: DWORD __stdcall AddNewMenuItem(){ HWND hwndAna = NULL; HMENU hMenu = NULL; hwndAna = FindWindowA("NameOfTheMainWindow,NULL); if(hwndAna !
DWORD __stdcall AddNewMenuItem(){
HWND hwndAna = NULL;
HMENU hMenu = NULL;
hwndAna = FindWindowA("NameOfTheMainWindow,NULL);
if(hwndAna != INVALID_HANDLE_VALUE){
hMenu = GetMenu(hwndAna);
if(hMenu != NULL){
HMENU hMenuFile = CreatePopupMenu();
AppendMenu(hMenuFile, MF_STRING , (UINT_PTR)ID_Load , L"Show Info");
AppendMenu(hMenuFile, MF_STRING , (UINT_PTR)ID_VWS , L"Go to Site");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hMenuFile, L"Site");
DrawMenuBar(hwndAna);
OriginalProcedure = SetWindowLongA(hwndAna, GWL_WNDPROC, (LONG)MyProc);
return 1;
}
}
return 0;
}
这是我自己的Windows过程:
LRESULT APIENTRY MyProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam){
switch(iMsg)
{
case WM_COMMAND:
switch LOWORD(wParam)
{
case ID_Load:
MessageBoxA(NULL,"this is info", "Information!", MB_OK|MB_ICONINFORMATION);
break;
case ID_VWS:
ShellExecute(NULL, L"Open", L"http://www.gotowebsite.com/", NULL, NULL, SW_SHOWNORMAL);
break;
}
break;
}
return CallWindowProc((WNDPROC)OriginalProcedure, hwnd, iMsg, wParam, lParam);
}
这些是ID:
#define ID_VWS 0x8801
#define ID_Load 0x8802
所有代码都会对消息做出反应,我的意思是它会成功地附加菜单,当我单击子菜单时,它会显示messagebox等,但在此之后,它会终止应用程序。不知怎的,它在ID消息之后返回WM_CLOSE消息,我无法管理它。我感谢你的帮助