发信人: daji(妲姬) 
整理人: teleme(2001-04-27 09:17:43), 站内信件
 | 
 
 
ForceForegroundWindow 是一个增强的 SetForeGroundWindow 函数。
 
 function ForceForegroundWindow(hwnd: THandle): boolean; 
 const 
   SPI_GETFOREGROUNDLOCKTIMEOUT = $2000; 
   SPI_SETFOREGROUNDLOCKTIMEOUT = $2001; 
 var 
   ForegroundThreadID: DWORD; 
   ThisThreadID      : DWORD; 
   timeout           : DWORD; 
 begin 
   if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); 
 
   if GetForegroundWindow = hwnd then Result := true 
   else begin 
 
     // 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; 
 end; { ForceForegroundWindow }  
 
 
  ----                 ^^                                    `_ ,
  ^^           |    |    |      Hello,                -(_)-
       ^^     )_)  )_)  )_)         My Friends!        ,  `
 姬海涵      )___))___))___)\                  ,
            )____)____)_____)\\              __)\_
 妲姬网苑 _____|____|____|____\\\__    (\_.-'    a`-.
 ---------\                   /--------(/~~````(/~^^`--------
   ^^^^^ ^^^^^^^^^^^^^^^^^^^^^         http://daji.xoasis.com
     ^^^^      ^^^^     ^^^    ^^      [email protected]
          ^^^^      ^^^
   | 
 
 
 |