Это работает для меня без необходимости использовать SetWindowPos
, чтобы окно всегда было сверху:
HWND foreGround = GetForegroundWindow();
if (foreGround != m_hWnd)
{
if (!::SetForegroundWindow(m_hWnd))
{
if (!foreGround)
{
foreGround = FindWindow(_T("Shell_TrayWnd"), NULL);
}
DWORD idForeground = GetWindowThreadProcessId(foreGround, NULL);
DWORD idTarget = GetWindowThreadProcessId(m_hWnd, NULL);
AttachThreadInput(idForeground, idTarget, TRUE);
::SetForegroundWindow(m_hWnd);
AttachThreadInput(idForeground, idTarget, FALSE);
}
BringWindowToTop();
}
Я использую это в приложении чата, чтобы новое сообщение чата могло украсть фокус (необязательно, поскольку некоторым пользователям это не нравится).