SetForegroundWindow失效的问题

试验出来的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也不是必须的

你可能感兴趣的:(SetForegroundWindow失效的问题)