Ram*_*hum 5 windows keyboard usability focus
我是一名开发人员,也是 Windows 的长期用户,一直痴迷于让我的系统尽可能方便地使用。
昨天我想到了一些在 Windows 中一直让我烦恼的事情,我认为这是理所当然的,我意识到我对它的工作方式有了更好的想法,现在我想知道是否可以调整 Windows 来工作像那样。
令我烦恼的是当 Windows 窃取焦点时。例如,我可能正在运行某个程序的安装程序。当它工作时,我会切换到我的浏览器并浏览,也许会在我的浏览器的电子邮件中输入一些文本。然后突然安装程序完成,它的窗口窃取了焦点。现在我正在写一封电子邮件,所以我可能会按下一个恰好绑定到该安装程序上的按钮的键,然后该按钮被调用,执行一些我从未打算发生的操作!
这对我来说很烦人,因为我正在使用一个名为 DexPot 的多桌面程序,当一个窗口窃取焦点时,它也会把自己带到我当前所在的桌面上,这真的很烦人,因为那时我必须把它放回原来的桌面。
我对这个问题的理想解决方案是如何工作的:每次窗口试图窃取焦点时,我们都会拦截它,并且不让它发生。我们显示类似烤面包机的消息,说“Foobar 安装程序需要焦点,按 Win-Whatever 切换到它”。如果当您按下组合键时,它会切换到窗口。
问题是:是否有一种简单的方法来调整 Windows 以实现这一目标?我对 Windows 编程知之甚少。我确实知道 AHK,如果可能的话,那就太好了。
不,没有简单的方法来添加此行为,但 Windows 会尝试自动执行此操作。
理论上,当您正在积极使用另一个应用程序时,应用程序不应该能够窃取前台。不幸的是,在某些情况下,Windows 无法区分应该更改前台的合法用户操作和不必要的前台盗窃。窗口管理器通常会在每个新版本的 Windows 中弥补漏洞,但也需要确保应用程序可以在用户希望时进入前台,即使这种愿望是间接表达的。
例如,当前前台进程启动的进程可以将窗口置于前台。这是必要的,以便当用户从资源管理器启动窗口时,新启动的进程可以打开其主窗口。此权限仅持续到下一次用户输入为止,因此,如果应用程序启动缓慢并且您开始处理电子邮件,则应用程序可能会在使用它们之前失去其前台权限。
有关进程能够将窗口设置到前台的要求列表,请参阅SetForegroundWindow 函数文档。
还有一些应用程序专门利用这些要求来窃取权限(通过加入前台队列或合成用户输入给自己),但我怀疑在您的安装程序场景中这是偶然的。
我不确定到底发生了什么,但我怀疑问题来自于作为服务运行的安装程序,并在尝试在当前桌面上启动应用程序时意外窃取了前台权限。
理论上,外部进程可以挂接到前台系统来覆盖它并显示您的确认 toast,但是要正确执行会很棘手,并且需要大量的低级代码(我可能会从 CbtHook 开始)。这在像 AHK 这样的脚本包中是不可能的(假设您指的是 AutoHotKey),但需要将本机 C/C++ 代码注入到每个正在运行的进程中。
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |