將窗口置頂的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow
方法一:
使用定時器,然后在定時器響應函數中定時調用,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);