试验出来的SetForegroundWindow失效的情况之一,是窗口被最小化了。解决的方法是
::ShowWindow(wnd_, SW_SHOWNORMAL);
::SetForegroundWindow(wnd_);
网上的万金油做法是
HWND hForeWnd = ::GetForegroundWindow();
DWORD dwForeID = ::GetWindowThreadProcessId(hForeWnd, NULL);
DWORD dwCurID = ::GetCurrentThreadId();
::AttachThreadInput(dwCurID, dwForeID, TRUE);
::ShowWindow(wnd_, SW_SHOWNORMAL);
::SetWindowPos(wnd_, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
::SetWindowPos(wnd_, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
::SetForegroundWindow(wnd_);
::AttachThreadInput(dwCurID, dwForeID, FALSE);
感觉SetWindowPos也不是必须的
网友评论