当用户按下网页上的按钮时,我有一个浏览器插件调用的dll。这个dll包含创建一个窗口的本机代码(在一个新的UI线程中),我需要这个窗口来获得键盘关注它的创建(用户期望的行为)。我不是想在用户的脸上推出一个不需要的弹出窗口。
我试过使用SetForegroundWindow(),SetFocus(),BringWindowToTop(),AttachThreadInput(),最小化/恢复窗口,你给它命名,我试过了。我所取得的最大进步是让新窗口在任务栏中闪烁。
我需要能够做到这一点的原因是因为我需要考虑键盘的可访问性,并允许用户使用我的新窗口而不必使用alt-tab。
有没有人对如何在这里获得键盘焦点有任何建议?
答案 0 :(得分:3)
如果任务栏上的窗口闪烁,那么您的代码不符合SetForegroundWindow()
documentation中列出的要求:
只有在以下情况之一时,进程才能设置前台窗口 条件是真的:
该过程是前台过程。
该过程由前台进程启动。
该过程收到了最后一个输入事件。
没有前台进程。
正在调试前台进程。
前景未锁定(请参阅LockSetForegroundWindow)。
前台锁定超时已过期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。
没有菜单处于活动状态。
应用程序无法强制窗口到达前台 而用户正在使用另一个窗口。相反,Windows 闪烁窗口的任务栏按钮以通知用户。