SetForegroundWindow. with some caveats. Here's a great article : http://www.etree.com/tech/Articles/attachthreadinput.pdf And here's some code to do it: DWORD MyThreadId=GetCurrentThreadId(); DWORD ForeThreadId=::GetWindowThreadProcessId(::GetForegroundWindow(),0); HWND hForegroundMe=0; // Get handle to the window you want to place in the foreground. // For instance use EnumThreadWindows if you know the ThreadId // (perhaps you have it saved in a shared memory?) // or use EnumWindows if you know the window text of the window // you are looking for... if (GetWindowLong(hForegroundMe,GWL_STYLE)&WS_MINIMIZE) ::ShowWindow(hForegroundMe,SW_RESTORE),::UpdateWindow(hForegroundMe); if (ForeThreadId!=MyThreadId) AttachThreadInput(ForeThreadId,MyThreadId,TRUE); ::SetForegroundWindow(hForegroundMe); if (ForeThreadId!=MyThreadId) AttachThreadInput(ForeThreadId,MyThreadId,FALSE);