Windows API有一个名为GetForegroundWindow
的方法。
但是当您点击它时,它会将桌面视为前景窗口。
我们都知道,当它发生时,前一个前景窗口不会被它叠加。
如何获得真正的前景窗口处理?
答案 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替代品,它可能有一个更好的算法,你可以使用...