將窗口置頂的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow


將窗口置頂的方法: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);   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM