public bool SetForegroundWindow(Form form, bool force)
{
IntPtr window = form.Handle;
IntPtr windowForeground = GetForegroundWindow();
if (window == windowForeground || SetForegroundWindow(window))
return true;
if (force == false)
return false;
if (windowForeground == IntPtr.Zero)
return false;
if (!AttachThreadInput(System.Threading.Thread.CurrentThread.ManagedThreadId, GetWindowThreadProcessId(windowForeground, 0), true))
return false;
SetForegroundWindow(window);
AttachThreadInput(System.Threading.Thread.CurrentThread.ManagedThreadId, GetWindowThreadProcessId(windowForeground, 0), false);
form.BringToFront();
form.Focus();
return (GetForegroundWindow() == window);
}