如何在Windows上获取前台窗口?

时间:2011-03-01 19:06:03

标签: winapi window

Windows API有一个名为GetForegroundWindow的方法。 但是当您点击它时,它会将桌面视为前景窗口。 我们都知道,当它发生时,前一个前景窗口不会被它叠加。 如何获得真正的前景窗口处理?

2 个答案:

答案 0 :(得分:3)

我认为你是过度设计你的解决方案。如果在收到更新时应用程序窗口不是前台窗口,则闪烁窗口。闪烁的目的是捕捉用户的注意力,你无法以编程方式确定他是否有他们的注意力。

看起来你真正想知道的是:“我的窗口部分当前是否对用户可见?”这是一个非常复杂的问题,即使你正确回答,你也无法知道用户是否会注意到这一变化。

答案 1 :(得分:1)

“桌面”(在真实桌面窗口顶部的Explorers桌面列表视图)和任务栏都是真正的窗口,用户可能正在“工作”(使用菜单等进行选择)

如果你想找到自己找不到的“真实”前景窗口,你最好的选择是在z顺序顶部的窗口,可能是这样的:

... enumfunc(hwnd,...) 
{
    if (GetClassName(hwnd)!= "Shell_TrayWnd")
    {
        if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd) && GetWindow(hwnd,GW_OWNER)==NULL)
        {
            DoSomethingWithRealForegroundWindow(hwnd)
            return FALSE
        }
    }
}

EnumWindows(enumfunc,0)

TaskSwitchXP是一个开源的alt-tab替代品,它可能有一个更好的算法,你可以使用...