我需要在程序A点击按钮1中的Click事件里,执行程序B,然后继续运行程序A如何使用HOOK实现?

解决方案 »

  1.   

    sorry...也怪你没说清楚问题...
      

  2.   

    ShellExecute
    ShellExecuteEx
      

  3.   

    如果用HOOK来做的话,程序B可以作成DLL形式。程序A要用一个程序来调用,主要代码如下:
    WinExec("A.exe",SW_SHOW);
    hWnd =  FindWindow();//得到程序A的窗口句柄
    dwThreadId = GetWindowThreadProcessId(hWnd,NULL);
    SetHook(dwThreadId);
    PostMessage(hWnd,WM_NULL,0,0);程序B的主要代码如下:__declspec(dllimport) BOOL WINAPI SetHook(DWORD dwThreadId);//需要倒出该函数
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
    if(ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
    g_hinstDll = (HINSTANCE)hModule ;
    }
        return TRUE;
    }
    BOOL WINAPI SetHook(DWORD dwThreadId)
    {
       hHook = SetWindowsHookEx (WH_CALLWNDPROC,CallWndProc,g_hinstDll,dwThreadId);
    }
    LRESULT WINAPI CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
       MSG * pmsg = (MSG*)lParam;
    DWORD dwThreadId;
    if(pmsg->message==WM_COMMAND&&pmsg->wParam==ID_BUTTON) 
             {            //要执行的代码
              } 
       return (CallNextHookEx(hHook,nCode,wParam,lParam)); 
    }