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