win32-GetActiveWindow和GetForegroundWindow


最近被這兩個api搞得有點暈,故查閱了相關的資料。

這篇文章解釋的很好:https://devblogs.microsoft.com/oldnewthing/20081006-00/?p=20643

測試代碼:

 case WM_LBUTTONDOWN:
    {   
            HWND h1 = GetFocus();
            HWND h2 = GetActiveWindow();
            HWND h3 = GetForegroundWindow();

            HWND h4 = SetActiveWindow(child_hwnd);
            HWND h5 = GetFocus();
            HWND h6 = GetActiveWindow();
    }

當點擊一個普通的win32窗口時,h1,h2,h3都返回相同的句柄。 如果在HWND h2 = GetActiveWindow();處打上斷點,運行代碼后,vs窗口會自動變成前景窗口,那么h1,h2仍然相同,即返回生成的win32窗口句柄,h3將變為vs的窗口句柄。

小結:      GetActiveWindow是獲取當前調用線程里的active window,GetForegroundWindow是獲取全局的前景窗口。如果活動窗口不是本線程的,GetActiveWindow會返回NULL的。

一般情況下,我們用GetForegroundWindow會更多一些。

對於h4,h5,h6,就是使用SetActiveWindow函數,將焦點轉為線程內的另一個窗口,我這里是將焦點轉到子窗口上,然后h5,h6返回子窗口的窗口句柄,h4返回的是之前的活動窗口句柄。


免責聲明!

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



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