Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WinApi:在新线程中将键盘焦点赋予新窗口_C++_Winapi_Keyboard_Focus_Accessibility - Fatal编程技术网

C++ WinApi:在新线程中将键盘焦点赋予新窗口

C++ WinApi:在新线程中将键盘焦点赋予新窗口,c++,winapi,keyboard,focus,accessibility,C++,Winapi,Keyboard,Focus,Accessibility,我有一个dll,当用户按下网页上的按钮时,浏览器插件会调用它。此dll包含创建窗口(在新UI线程中)的本机代码,我需要此窗口以获得键盘对其创建的关注(用户预期的行为)。我并不是想把一个不需要的弹出窗口推到用户的脸上 我尝试过使用SetForegroundWindow()、SetFocus()、BringWindowToTop()、AttachThreadInput()、最小化/恢复窗口,你可以说,我已经尝试过了。我取得的最大进步是让新窗口在任务栏中闪烁 我之所以需要这样做,是因为我需要考虑键盘的

我有一个dll,当用户按下网页上的按钮时,浏览器插件会调用它。此dll包含创建窗口(在新UI线程中)的本机代码,我需要此窗口以获得键盘对其创建的关注(用户预期的行为)。我并不是想把一个不需要的弹出窗口推到用户的脸上

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

我之所以需要这样做,是因为我需要考虑键盘的可访问性,并允许用户使用我的新窗口,而无需对其使用alt tab键


是否有人对如何在此处获得键盘焦点有任何建议?

如果任务栏上的窗口正在闪烁,则您的代码不符合下列要求:

只有满足以下条件之一时,进程才能设置前景窗口 条件是正确的:

这个过程就是前景过程

该进程由前台进程启动

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

没有前台进程

正在调试前台进程

前景未锁定(请参见LockSetForegroundWindow)

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

没有激活的菜单

应用程序无法将窗口强制置于前台 当用户使用另一个窗口时。取而代之的是Windows 闪烁窗口的任务栏按钮以通知用户。


可能与IE作为一个低完整性进程运行的事实有关。