使用sendmessage将wm_close发送到另一个进程

rpl*_*usg 5 c++ windows messaging visual-c++

我想将wm_close发送到另一个进程,并希望通过该进程安全地结束该进程。

int _tmain(int argc, _TCHAR* argv[])
{

    DWORD SetOfPID;
    SetOfPID = GetProcId(_T("abc.exe"));  //this will return pid
    HANDLE h = OpenProcess(PROCESS_ALL_ACCESS,false, SetOfPID);

    HWND hwnd = ::GetTopWindow(NULL);
    while(hwnd)
    {
        DWORD pid;
        DWORD dwThreadId = ::GetWindowThreadProcessId(hwnd, &pid);
         if(pid == SetOfPID)
         {    
              break;
         }
         hwnd = ::GetNextWindow(hwnd, GW_HWNDNEXT);
    }
    //DestroyWindow(hwnd);
    bool temp = IsWindow(hwnd); **//this gives true**
    LRESULT res = ::SendMessage(hwnd, WM_CLOSE, NULL, NULL);
    DWORD err = GetLastError(); **//this gives 6**
    CloseHandle(hwnd);
    CloseHandle(h);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码看起来不错,但是目标进程没有终止,有人可以帮我吗?

pag*_*gra 2

您确定您找到的窗口是正确的吗?您可以使用 Spy++ 轻松检查。而且,在搜索窗口时,我认为使用EnumWindows更好。我不确定你的方法是否正确。