Google Chrome:始终位于最顶部的错误

Google Chrome:始终位于最顶部的错误

抱歉,标题比较模糊,但是这个很难解释,所以请耐心等待。

我在工作中使用 Windows Vista 进行 Web 开发,有时当我单击或按 Alt-Tab 切换到背景窗口时,该窗口会获得焦点,但不会被带到前面。

为了将窗口移到最前面,我必须单击应用程序边框(当出现调整大小光标时),然后窗口就会跳到最前面。

我遇到这个问题已经有大约一年了,每天至少发生十几次,但并不是一直这样 - 似乎是随机的。

我希望我已经充分解释了这个问题(并且您已经理解了它),并希望任何能解决这个问题的建设性的答案或意见。

示例:如果我按 Alt-Tab 键从 Google Chrome 切换到记事本,并且此问题随机发生,Google Chrome 将保留在记事本前面,但是,当窗口位于 Google Chrome 后面时,我将能够在记事本中输入文本。单击记事本的内容区域不会将其带到前面,但单击其窗口边框会。

视频示例

http://vimeo.com/19388998

在这个视频中,我从 Google Chome 点击到 UltraEdit,chrome 字体保持不变,但正如你所见,我仍然可以在 UltraEdit 中打字。

我开始相信这可以是 Google Chrome 中的一个错误,所以我会继续观察其他应用程序之间是否存在此问题。

答案1

对于 Chrome 来说,这是一个已知问题: Chrome 窗口始终位于最顶部的行为

解决此问题的快速方法是选择 Chrome 窗口并按两次 F11。

答案2

要禁用此功能,你必须点击

ALT + 空格 + C

alt+ space+c

按下这些按钮后,Google Chrome 浏览器将自动关闭。然后重新启动 Google Chrome 浏览器。

这个问题将永远得到解决:)

答案3

它是什么样子的?

只有一种行为接近这个问题,那就是总在最前面行为。
一些代码,也许来自程序本身,可能会改变窗口的属性...

如何将窗口设置为“始终在最前面”?

如何创建始终位于最顶部的表单告诉我们设置窗口位置调用时将第二个参数设置为窗口顶部,这会立即将其置于顶部并保持这种状态。

在谷歌上快速搜索后,这个结果揭示用户32库成为此功能的所有者。

谁将我的窗口设置为“总在最前面”?

现在我们知道了调用了哪个函数,我们想知道该函数何时被调用。这将需要我们进行堆栈跟踪并进行分析,而Windows 性能工具包能做到这一点,我们很高兴 Rohitab Batra 写了一篇很棒的文章API监控

抱歉,但这是很难的作业:

  • 下载API监控器并安装它。
  • 开放API监控作为管理员,如果您有 64 位,则需要执行两次。
  • 确保API 捕获过滤器中未检查任何内容在左侧。
  • 在同一个地方,改变所有模块在对话框顶部用户32库
  • Windows Application UI Development > Windows and Messages > Windows
    

    进而

    User32.dll > SetWindowPos
    

现在,您将想要挂钩一些进程。警告:按 PID 排序,不要挂接winlogon.exe任何 PID 低于该 PID 的进程,否则系统会挂起或崩溃。您可能也会在其他进程中遇到这种行为,但这有点像反复试验,看看您可以挂接哪些进程。所以:

  • 按 PID 排序,并挂钩所有比 更新的内容winlogon.exe
  • 如果一切顺利,你可以浏览钩子进程对话。
  • 查找如下所示的 API 调用:

    设置窗口位置 ( 0x000000000002043c,HWND_BOTTOM | 0x00000000fffffffe,0,0,0,0,
    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE )

呼吁设置窗口位置HWND_BOTTOM | 0x00000000fffffffe-2 + 1 = -1 = HWND_TOPMOST) 是我们所追求的,并且执行此调用的进程才是您应该为问题负责的进程。

我放弃了...我该如何解决我的“始终在最前面”问题?

以火攻火,我们将把所有窗户都1.1.1. HWND_NOTOPMOST(非TOPMOST)

哎呀,编程!但是,这也可以通过脚本轻松完成...

这是一个非常简单的家庭作业:

  • 下载AutoIt v3

  • 创建一个ByeByeTopMost.au3包含以下内容的文件:

    While 1
        $var = WinList()
    
        For $i = 1 to $var[0][0]
            WinSetOnTop($var[$i][1], "", 0)
        Next
    
        Sleep(5000)
    WEnd
    
  • 将其放在您的启动文件夹中并运行它或重新启动。

如果你根本不喜欢做作业,可以下载这个 zip 文件我做了。

玩得开心... :-)

附言:在最后一种情况下,您无法使用“始终在最前面”功能。要么排除故障,要么另寻他法…… ;-)

答案4

我遇到了同样的问题,我设法通过转到“开始”菜单中的“切换用户”解决了这个问题,重新登录后,窗口再次尊重工具栏。它似乎影响了所有窗口,虽然 Chrome 可能是原因之一,但它似乎肯定会影响整个 Windows 系统,这表明罪魁祸首可能来自 Windows 本身。在 Windows XP 和 7 上使用了 5 年的 Chrome 之后,我第一次遇到这个问题,并发表了这篇文章。

相关内容