[轉]http://hi.baidu.com/neil_danky/item/f9dca0ca36a79811515058d3
方法一:
使用定時器,然後在定時器響應函數中定時調用,SetWindowPos()函數,第一個參數寫HWND_TOPMOST
方法二:
因為2000/XP改變了SetForegroundWindow的執行方式,不允許隨便把視窗提前,打擾使用者的工作。可以用附加本線程到最前面視窗的線程,從而欺騙windows。
AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE);
SetForegroundWindow();
SetFocus();
AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),FALSE);
方法三:
如何啟用指定的視窗事件 ●
我們知道,Windows 9x/2000中SetForegroundWindow函數當使用者正在操作其他視窗時是不能強制某個視窗為前景視窗的,而是啟用視窗並調用FlashWindowEx函數來通知使用者。但是很多實際情況要求將啟用視窗的同時將建立這個視窗的線程置為前景狀態。碰到這種情況我們可以使用USER32.DLL中的幾個未公開API函數。
void SwitchToThisWindow (
HWND hWnd, // 被啟用的視窗控制代碼
BOOL bRestore // 如果被極小化,則恢複視窗
);
必須動態載入這個函數。
typedef void (WINAPI *PROCSWITCHTOTHISWINDOW) (HWND, BOOL);
PROCSWITCHTOTHISWINDOW SwitchToThisWindow;
HMODULE hUser32 = GetModuleHandle("user32");
SwitchToThisWindow = ( PROCSWITCHTOTHISWINDOW)
GetProcAddress(hUser32, "SwitchToThisWindow");
接下來只要用任何現存視窗的控制代碼調用這個函數即可,第二個參數指定如果視窗極小化,是否恢複其原狀態。
SwitchToThisWindow(hWnd, TRUE);