在实际开发中,可能需要当次把窗口置顶。使用BringWindowToTop发现效果不是很理想,有时候不能置顶。
BOOL ForceForegroundWindow(HWND hWnd)
{
if (!hWnd || !::IsWindow(hWnd))
return FALSE;
HWND hWndCurrentWindow = ::GetForegroundWindow();
if (hWndCurrentWindow == NULL)
{
return ::SetForegroundWindow(hWnd);
}
DWORD dwCurProcId, dwCurThreadId = ::GetWindowThreadProcessId(hWndCurrentWindow, &dwCurProcId);
DWORD dwHWndProcId;
::GetWindowThreadProcessId(hWnd, &dwHWndProcId);
BOOL bReturn = FALSE;
if (dwHWndProcId == dwCurProcId)
{
bReturn = ::SetForegroundWindow(hWnd);
}
else
{
DWORD dwMyThreadId = ::GetCurrentThreadId();
if (::AttachThreadInput(dwMyThreadId, dwCurThreadId, TRUE))
{
bReturn = ::SetForegroundWindow(hWnd);
::AttachThreadInput(dwMyThreadId, dwCurThreadId, FALSE);
}
else
{
bReturn = ::SetForegroundWindow(hWnd);
}
}
return bReturn;
}