“显示桌面”有时会将窗口设置为“始终位于最顶部”

“显示桌面”有时会将窗口设置为“始终位于最顶部”

不用担心,不再有“我的显示桌面按钮去哪儿了”的问题。

我发现,在 Windows 7 下,当您使用“显示桌面”功能(我更喜欢⊞ Win+D快捷键)然后再次使用该功能将所有窗口恢复时,某些窗口的行为就像粘在 z 顺序的前面一样。这意味着,假设我打开了窗口 AB 和 C,焦点在 A 上,按两次⊞ Win+ D,现在可能发生的情况是,如果我想切换到 B 或 C,无论是通过Alt+Tab还是通过在任务栏上选择它们,任务栏都会显示突出显示,但 A 在前台保持可见(并且可用,这不仅仅是渲染问题)。

想象一下以下情况,所有三个窗口都级联并重叠:

A(焦点)
B
C

+⊞ WinD

桌面(焦点)

+⊞ WinD

A(焦点)
B
C

-> 单击任务栏上的 C

A
C(焦点)
B

-> 单击任务栏上的 B

A
B(焦点)
C

依此类推。焦点是指实际的输入焦点,即在第二种情况下,当窗口 A 位于前台时,任何键盘输入都会发送到窗口 B。

不管是什么类型的应用程序;在我目前的情况下,Outlook 的一个实例和 Explorer 的一个实例卡住了,而 Explorer 的第二个实例和 Firefox 的一个实例则正常运行。这应该表明,这个问题甚至可能出现在同一个应用程序的多个实例之间,并且没有花哨的应用程序喜欢假装自己是最重要的程序并在内部强制“始终在最前面”。

再次显示和取消显示桌面没有帮助;在最坏的情况下,另一个窗口可能也会“粘在 z 顺序的顶部”。我可以轻松地在它们之间切换,但为了获得仍然在顶部正常运行的窗口,我必须手动最小化有问题的窗口。

到目前为止,唯一的解决办法似乎是关闭有问题的窗口,我还没有发现其他有帮助的方法。

可能是 Windows 7 有一个错误,可以强制总在最前面从“显示桌面”恢复时某些窗口上会出现标记,还是我做错了什么?

更多信息:

⊞ Win+d问题在 Win7-64bit-Ultimate 上易于复制。

受影响的窗口(任何程序的窗口)似乎被放入一个单独的“Z”组中。您可以将多个/许多窗口置于此始终处于顶部状态,受影响状态的窗口将彼此正常关联,但以下情况除外:

  • 整个组始终位于任何不受影响的窗口之上
  • 整个小组都在任务栏前面。
  • 整个组不响应(任务栏上的上下文)“级联窗口”或类似的命令。

受影响的窗口位于任务栏顶部,并以“特殊窗口”的形式运行,这表明 Windows 7 必须具有一个隐藏的“功能”,即始终位于顶部,该功能与显示桌面功能一起应用。该功能似乎将窗口置于超级窗口状态,位于任务栏顶部(普通组保留在任务栏后面)。当您单击任务栏的开始菜单或上下文菜单时,开始菜单/任务栏将出现在始终位于顶部的组的前台,但这不会恢复受影响的窗口,只会暂时接管,直到您切换到开始菜单/任务栏以外的其他内容。

这是找到答案的关键。我们如何让窗口取消分配特殊超级状态或首先不进行分配?

来自另一位用户的更多信息: 关闭所有窗口并重新启动后,问题似乎已经解决。起初我无法重现该错误,但在打开所有工作窗口后,我确实在任何窗口上重现了该错误。

我几乎认为它可能是通过与 Chrome 的多个窗口相关的操作来初始化的,然后一旦一个窗口出现桌面显示问题,就会出现桌面显示问题。这是因为:在使用 Chrome 会话保护程序(会话伙伴)进行更多操作并恢复会话并获得超级状态后,我恢复并关闭了我所在的窗口,现在我又处于一个无法重现错误的地方,即使在我的“工作环境”中,两个窗口中有大约 35 个 chrome 选项卡,以及其他程序、文件位置、远程桌面和第二个 chrome 配置文件(其中包含另外十几个选项卡)。

因此,回到原点,寻找超级大国现象的真正煽动者。

一旦你真正遇到了超级状态问题,以下情况将会重现:好的,我在输入时正在执行此操作:

打开 chrome(查看此网站),然后打开记事本,然后打开计算器(可以是任何窗口,但为了演示的目的,请跟着我一起操作)

窗口应该正常运行,重叠窗口以便您可以看到所有窗口的边缘,并且 Z 顺序为(从前到后):浏览器在顶部,然后是计算器,然后是记事本(您应该能够看到部分背景窗口)。

现在,在浏览器上方,按 win+d,然后再次按 win+d。

单击计算器,然后单击浏览器,浏览器现在卡在前台。单击记事本将使焦点移到记事本,它将位于计算器前面,但它将停留在浏览器后面,因为浏览器处于“超级状态”。(从 win+d 返回后切换焦点的许多安排都会产生问题,除了单击桌面,我还注意到,除非它与我的 chrome 浏览器重叠,否则我无法使计算器进入超级状态)。

再次强调,除非您的至少一个窗口受到影响,否则这似乎不起作用。

我们仍然不知道如何让初始窗口进入超级状态,只知道如何让后续窗口进入超级状态。

答案1

最近遇到了这个问题。不知道是怎么回事,但我能够通过按两次 ⊞ win + d 并单击另一个窗口将窗口置于此“超级窗口”状态。我本来想尝试使用 Ctrl + Shift + Esc 快捷方式打开任务管理器,但我却按了 Ctrl + Alt + Esc,窗口就恢复正常状态了。我能够使用每个窗口上的按键顺序成功地将所有窗口恢复到正常状态,并且 ⊞ win + d 不再将窗口置于“超级窗口”状态。希望这对您有所帮助。

答案2

两种解决方法:

我使用 win+D。问题很容易复制,Win7-64bit-Ultimate。

解决方法一 将所有窗口提升为超级状态,以便它们可以正常交互。此解决方法的问题是,新窗口仍会在所有超级状态窗口后面打开,如果您有许多窗口和/或许多监视器,这可能会非常烦人。

解决方法二 另一个半解决方案是关闭该进程并重新打开它。新窗口将处于正常状态,但如果我使用,问题可能会再次出现Win+d,这会导致大量关闭并重新打开数十个窗口以避免出现问题。

答案3

我使用“显示桌面”作为鼠标按钮命令,并注意到您遇到的情况。有时,某些窗口在按下“显示桌面”按钮时处于焦点状态,然后再次按下“显示桌面”按钮并执行反向命令后,将表现为“始终在最前面”的窗口。

我在 Internet Explorer、Windows Explorer 和 OUtlook 中都发现了这个问题。我运行的是 Windows 7 Ultimate x64。除了关闭并重新打开窗口之外没有其他解决办法。

不过,我感兴趣的是,有意执行此命令,而无需从系统托盘运行第三方软件。

编辑 2011 年 9 月 29 日

为了进一步说明我最初的评论,我找到了一个解决方案/解决方法 - 但这个解决方案仅适用于我的系统,因为我使用 UltraMon,您必须安装该程序才能使其为您工作。此外,它必须是 UltraMon 版本 3.1.0 或更高版本。下载并安装软件后,转到http://www.realtimesoft.com/ultramon/scripts/并下载“Always on Top”脚本。这是一个 .vbs 文件,可执行此功能:

_Set wnd = CreateObject("UltraMon.Window")
If wnd.GetForegroundWindow() = True Then
    If wnd.AlwaysOnTop = True Then
        wnd.AlwaysOnTop = False
    Else
        wnd.AlwaysOnTop = True
    End If
    wnd.ApplyChanges 0
End If_

然后打开 UltraMon 选项,转到热键选项卡,选择“运行应用程序或脚本”,然后单击Add Hotkey。将打开一个模式对话框,您应该在其中输入要使用的键盘提示(组合),定位到我们之前下载的脚本,然后单击ok。现在您有一个热键组合,可以在 Always_on_Top 值的启用和禁用之间切换。因此,当您在显示桌面或撤消显示桌面时出现错误时,我们现在有一个快速的键盘修复程序。就像我上面评论的那样,如果您希望窗口被强制放在前面,这有时会有所帮助,您现在也可以选择这样做。

这对我来说很有用,因为我一直打开 UltraMon。这是一款很棒的程序,但很多功能已经被我的显卡覆盖了,所以我考虑将它完全删除,但现在有了这项有价值的功能,它在我的电脑上就占据了一席之地。

如果有人对上述脚本有任何见解,以及是否可以将其应用于活动窗口而无需加载 Ultramon,请随时为我的答案做出贡献。谢谢。

答案4

我发现这是 Nvidia WMI Provider 的问题。我有两个实例正在运行(一个是 32 位版本)。我停止了 32 位版本,问题就消失了。

相关内容