问题标签 [focus-stealing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3329 浏览

windows - 如何防止 Windows 中的焦点窃取?

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

  • 人们建议涉及 ForegroundLockTimeout 注册表项(或 TweakUI,我相信它只是更改上述注册表项)的不完整解决方案,这不是很有效。
  • 不断成群的 Windows 用户抱怨

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

  • 当全屏应用程序聚焦时,某些东西会触发程序在后台弹出一个对话框窗口,从而导致全屏应用程序最小化。

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

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

0 投票
1 回答
454 浏览

c# - 如何防止另一个程序的特定窗口窃取焦点(C#?)

我正在使用具有多个窗口的某个程序,并且这些窗口中的每一个都可能在某些时间(主要是在它们打开时)窃取焦点。我想防止特定窗口在打开时窃取焦点(以及在其他时候,但这不太重要,如果我得到主要问题的解决方案,我可能会自己弄清楚)。我想用 C# 来做,但任何其他编程语言可能也不错。

0 投票
1 回答
138 浏览

focus-stealing - 窃取焦点以实现系统范围的搜索框

在我的应用程序(http://tabbles.net)中,我需要提供一个“全局搜索”快捷键,就像您在 google 桌面中看到的那样:如果您随时按 CTRL+CTRL(无论哪个应用程序处于活动状态并且具有键盘焦点) ),必须弹出一个对话框,您必须能够在其中键入搜索文本并按 Enter。

这需要从活动应用程序中窃取焦点。

到目前为止,我能够安装一个全局键挂钩并使用它来检测组合键并显示一个对话框。我把对话框放在最上面,所以它总是出现在活动应用程序的顶部。但是,如果不先用鼠标单击对话框,用户就无法在对话框中键入任何内容,因为我无法将焦点放在对话框内的文本框上。所以用户在输入之前必须用鼠标点击,这是一种负担。

有没有办法规避 Windows 焦点窃取预防?谢谢你。

0 投票
2 回答
3436 浏览

wpf - WindowsFormsHost 将注意力集中在激活应用程序上,甚至通过应用程序的其他 wpf 表单激活

重现我的案例(.net 4.0)

  1. 创建 WPF 应用程序 (MainWindow.xaml)
  2. 添加包含文本框的 Winform 用户控件 (UserConrol1.cs - Winform)
  3. 使用 windowsformshost 将 UserControl1 放入 MainWindow.xaml
  4. 将另一个包含文本框 (wpf) 的 WPF 窗口添加到项目 (Window1.xaml)
  5. 在 MainWindow InitializeComponent 之后创建并显示 Window1

您的项目已准备就绪,

  1. 运行项目并在 MainWindow.xaml 中设置文本框(在 WindowsFormsHost 中)
  2. 通过打开一个窗口(Windows 文件资源管理器、记事本、winamp 等)停用您的应用程序
  3. 尝试通过用鼠标单击文本框在 Window1 窗口中的文本框中写入

而且您会看到您无法在 Window1 中的文本框上设置焦点,因为 MainWindow Texbox(在 winformshost 中会窃取您对激活的应用程序的关注)

任何的想法?

主窗口.xaml

主窗口.xaml.cs

Window1.xaml

Window1.xaml.cs

0 投票
5 回答
15732 浏览

c# - 如何以编程方式最小化打开的窗口文件夹

如何获取打开的文件夹列表,枚举并以编程方式最小化每个文件夹?

有时,当从应用程序中的一个表单跳转到另一个表单时,某些打开的文件夹会从工具中窃取焦点。防止这种情况对我们的客户来说是重中之重。客户是视障人士,因此他们只能通过屏幕阅读器访问机器。最小化其他窗口(文件夹)根本不是问题,实际上是一个要求。

我试过这个:

果然不出所料。

更新

从这里的答案,我尝试了这个:

这会创建大量不可见的资源管理器窗口,这些窗口会突然出现在任务栏中。我在处理 Windows API 方面有点菜鸟,所以代码本身实际上会有所帮助。

0 投票
2 回答
3097 浏览

java - 如何防止 Java 图形程序在更新窗口时窃取焦点?

在(嵌入式)Ubuntu 12.04 系统上,我们有一个简单的 Java 程序,它在窗口上显示一些图形模式,大约每秒更新一次。我们用它来监控系统上运行的一些进程。问题在于,虽然它处于活动状态且未最小化,但它会在窗口更新时窃取焦点。这使得使用打开的终端窗口变得不可能。

运行应用程序表单命令行或从 Eclipse IDE 时,行为是相同的。

在 NetBeans IDE 下运行时,在 Windows 7 上不会出现同样的问题。

我们如何防止 Java 应用程序窃取 Ubuntu 机器上的焦点?


更新 1:发现这个问题似乎与同样的问题有困难: 如何停止/解决 Java 应用程序在 Linux 窗口管理器中窃取焦点。阅读它,我了解到问题在于使用 JFrame 作为容器,这就是我们使用的。他们的解决方案是使用 JWindow 容器而不是 JFrame 容器。然而,在寻找差异时,JWindow 是“裸露的”,不像“真正的”窗口,因为没有装饰。有没有办法JFrame 中使用 JWindow,从而消除焦点窃取?


更新 2:尝试在 PC 上的 Ubuntu 虚拟机上运行此程序会产生相同的不当行为。这表明 Windows 7 和 Linux 的 Java 运行时存在差异,并且该问题并非特定于 Embedded linux。


更新 3:这是一个 SSCCE:


更新 4:在准备 SSCCE 时,我阅读并了解了 JFrame 对象的大量窗口刷新方法。碰巧问题出在循环setVisible()内的调用上。while解决方案是用repaint()方法替换它。

0 投票
2 回答
5204 浏览

c# - 打开隐藏的 Internet Explorer 窗口而没有获得焦点?

我想打开一个隐藏的 Internet Explorer 窗口,但它不会窃取焦点。我有一个 Timer 对象,它每 5 分钟打开一次 Internet Explorer 以检查网站是否有更新。问题是每次检查更新时,它都会从前台的当前应用程序中窃取焦点。下面是我如何开始这个过程:

它总是偷走焦点,即使它是隐藏的。我希望它像什么都没有发生一样开始,所以用户可以继续他们正在做的事情。谢谢。

0 投票
1 回答
1257 浏览

android - 如何检测和防止Android应用程序中的焦点窃取

Q1:是否有可能检测到另一个Android App是否在窃取您自己App的焦点?

Q2:是否可以防止其他Android App抢走自己App的焦点?

我只看到文档中的音频焦点“接管”,但没有看到屏幕焦点“接管”:http: //developer.android.com/training/managing-audio/audio-focus.html

看看我为什么问这些问题:http: //blog.spiderlabs.com/2011/09/google-android-focus-stealing-vulnerabiltiy-demo.html

0 投票
0 回答
294 浏览

java - 如何阻止第三方 Java 应用程序一直窃取焦点?

我们使用第三方 Java 应用程序,每次更新都会转移注意力。我想做的是为这个单一程序隔离这个单一事件并以某种方式忽略/阻止它。我愿意编写一个简短的 exe 来执行此操作,但是我应该使用什么 api 调用或其他工具来执行此操作。我需要某种钩子吗?请帮帮我,我的互联网搜索还没有出现。我们使用的是 Windows 7。

0 投票
2 回答
1342 浏览

windows - 怎么可能如此轻易地窃取焦点?

在 Windows 7 上使用 Outlook 2013,我创建了这个宏,只是为了测试它:

每当我在处理不同的应用程序并且触发 Outlook 提醒时,Outlook 就会成为活动窗口,从我正在处理的应用程序中窃取焦点。

怎么可能??

我的意思是,我认为“Activeexplorer.Activate”方法使用了一些 Windows api,例如“SetForegroundWindow”或者“SetActiveWindow”或其他一些 api。

所有这些 api 都禁止窃取焦点,所以我的问题是 Outlook vba 方法如何能够如此轻松和可怕地窃取焦点?

警报已部分解除,如https://msdn.microsoft.com/it-it/library/windows/desktop/ms633539(v=vs.85).aspx所述,SetForegroundWindow 可由不在前台如果“前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。”</p>

我将“HKCU:\Control Panel\Desktop”处的注册表项“ForegroundLockTimeout”的值从零更改为 20000,现在,在我的具体情况下,Outlook 不会窃取焦点。

我想知道哪个是“ForegroundLockTimeout”注册表项的最大值,或者换句话说,是否可以永久禁用不在前台的任何其他进程从活动应用程序中窃取焦点。