Few years ago I've used the following function (found somewhere on Internet). Let me know if it works:
Code:
function ForceForegroundWindow(hwnd: THandle): Boolean;
const
 SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
 SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;

var
 ForegroundThreadID: LongWord;
 ThisThreadID: LongWord;
 timeout: LongWord;
begin
 if (IsIconic(hwnd)) then
  ShowWindow(hwnd, SW_RESTORE);

 if (GetForegroundWindow = hwnd) then
  begin
   Result:= True;
   Exit;
  end;

 // Windows 98/2000 doesn't want to foreground a window when some other
 // window has keyboard focus
 if ((Win32Platform = VER_PLATFORM_WIN32_NT)and(Win32MajorVersion > 4))or
  ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
  ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
  (Win32MinorVersion > 0)))) then
  begin
   // Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
   // Converted to Delphi by Ray Lischner
   // Published in The Delphi Magazine 55, page 16
   Result:= False;
   ForegroundThreadID:= GetWindowThreadProcessID(GetForegroundWindow, nil);
   ThisThreadID:= GetWindowThreadPRocessId(hwnd, nil);
   if (AttachThreadInput(ThisThreadID, ForegroundThreadID, True)) then
    begin
     BringWindowToTop(hwnd); // IE 5.5 related hack
     SetForegroundWindow(hwnd);
     AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
     Result:= (GetForegroundWindow = hwnd);
    end;

   if (not Result) then
    begin
     // Code by Daniel P. Stasinski
     SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
     SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE);
     BringWindowToTop(hwnd); // IE 5.5 related hack
     SetForegroundWindow(hWnd);
     SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
    end;
  end else
   begin
    BringWindowToTop(hwnd); // IE 5.5 related hack
    SetForegroundWindow(hwnd);
   end;

 Result:= (GetForegroundWindow = hwnd);
end;
Just use it like: ForceForegroundWindow(Form1.Handle);