Dll 窗口子类化终止外部应用程序

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 !

我正在尝试将外部应用程序的菜单子类化。我正在使用SetWindowLong函数对Windows过程进行子类化,它工作得很好,但在完成我想要的操作后,它终止了应用程序,我不知道为什么

这是我注入的函数:

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消息,我无法管理它。我感谢你的帮助