2

当用户按下网页上的按钮时,我有一个由浏览器插件调用的 dll。这个 dll 包含创建一个窗口的本机代码(在一个新的 UI 线程中),我需要这个窗口来获得键盘的焦点来创建它(用户期望的行为)。我不是想在用户面前弹出一个不需要的弹出窗口。

我尝试使用 SetForegroundWindow()、SetFocus()、BringWindowToTop()、AttachThreadInput(),最小化/恢复窗口,你说的,我都试过了。我取得的最大进展是让新窗口在任务栏中闪烁。

我需要能够做到这一点的原因是因为我需要考虑键盘可访问性,并允许用户使用我的新窗口而无需使用 alt-tab 键。

有人对如何在这里获得键盘焦点有任何建议吗?

4

1 回答 1

3

如果窗口在任务栏上闪烁,则您的代码不符合SetForegroundWindow()文档中列出的要求:

只有当下列条件之一为真时,进程才能设置前台窗口:

该进程是前台进程。

该进程由前台进程启动。

进程收到最后一个输入事件。

没有前台进程。

正在调试前台进程。

前景未锁定(请参阅 LockSetForegroundWindow)。

前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。

没有菜单处于活动状态。

当用户正在使用另一个窗口时,应用程序不能将一个窗口强制到前台。相反,Windows 会闪烁窗口的任务栏按钮以通知用户。

于 2013-07-04T17:49:32.583 回答