为什么我的Windows应用程序在规则不应该得到关注?

时间:2012-02-18 01:16:58

标签: winapi focus foreground

到目前为止,每个为Windows编写的人都可能知道应用程序无法(正式)从前台进程中抢夺焦点,why。但是我无意中设法偷走了焦点,并且不明白这是怎么回事。

我有一个Delphi应用程序,用户使用热键(或通过鼠标单击,或通过Alt + Tab),选择一段文本并点击Enter。然后我的应用程序最小化(隐藏到托盘,甚至),并将刚刚选择的文本用户粘贴到活动窗口中。这里没有什么新东西,有很多类似的项目 - 剪贴板扩展器,词汇表,宏程序等。

让我感到困惑的是,在完成上述所有操作然后再睡眠1500毫秒后,我恢复了我的主要形式,重新获得了焦点!它成为前景窗口,即使它不是1500毫秒前(已测试; Windows 7 32位)。

事实上,我根本不需要这个,所以在恢复我的主要表单之前,我会记录哪个窗口有前景,然后在给我之后将它还给那个窗口。我只是好奇为什么我的应用程序在规则不应该出现在前台。也许我不像我想的那样完全理解规则?

1 个答案:

答案 0 :(得分:2)

如果查看SetForegroundWindow的文档,您会看到成功调用的条件列表,其中一个是“进程收到最后一个输入事件”。因此,如果用户在按下您的应用程序后没有执行任何操作,您仍然有权窃取焦点。我不知道当窗口恢复时Delphi是否为你调用了SetForegroundWindow,但它可能是值得研究的。

我不知道你如何恢复你的窗口,但使用SW_SHOWNOACTIVATEShowWindow可能有帮助...