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返回的是之前的活动窗口句柄。

原文链接: https://www.cnblogs.com/strive-sun/p/13370662.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    win32-GetActiveWindow和GetForegroundWindow

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404867

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月25日 下午4:46
下一篇 2023年4月25日 下午4:46

相关推荐