【问题标题】:How can I prevent focus stealing in Windows?如何防止 Windows 中的焦点窃取?
【发布时间】:2011-02-18 15:25:21
【问题描述】:

在 Windows 中快速谷歌搜索Focus Stealing 的解决方案会显示两个主要的结果类别:

  • 人们提出不完整的解决方案,涉及 ForegroundLockTimeout 注册表项(或 TweakUI,我相信它只是更改了上述注册表项), 这不是很有效。
  • Incessant hordes 的 Windows 用户 complaining 关于 it

在两种常见情况下特别烦人:

  • 当全屏应用获得焦点时,某事会触发程序在后台弹出对话框窗口,从而导致全屏应用最小化。

  • 在您键入时,一个窗口会窃取焦点,从而窃取您的所有击键。如果您碰巧按了 Space、Enter 或触发键盘快捷键(例如 Y 表示 Yes),可能会导致完全不受欢迎的结果。

对于这两种情况之一或两种情况,可以应用哪些创造性的解决方案来解决此问题?

【问题讨论】:

  • 编程解决方案是编写不会窃取焦点的应用程序,这似乎不是这里要问的。我认为这是超级用户的工作。
  • 超级用户未能解决这个确切的问题。 superuser.com/questions/18383/… - 他们唯一的解决方案是上述损坏的 ForegroundLockTimeout/TweakUI 答案
  • 我将尝试解决击键问题的一半。我不知道从哪里开始普遍修复全屏应用失焦的问题。

标签: windows user-interface focus-stealing


【解决方案1】:

我对如何解决它有一个建议,但由于我缺乏知识,我无法完全实施。

窗口之间的焦点变化必须由调用 Windows API 函数的违规程序发起,该函数很可能位于 shell32 或 user32 中。一些程序,如 Adob​​e Photoshop,会多次(至少两次)调用,以在启动时强制用户自行启动。这个想法是挂钩这个 API 函数(如果可能的话)并检查调用的来源。如果不是来自 explorer.exe(即 Alt+Tabbing 或单击任务栏上的图标),则调用应该被所述钩子阻止。

【讨论】:

  • 我发现了一个 API windows 用于在其他程序获得焦点时通知程序(例如让 shell 显示活动窗口)。我相信它可以用来完全防止焦点事件的发生。
猜你喜欢
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多