浏览器中的ShellExecute url并不总是将焦点设置在浏览器上

ShellExecute url in browser does not always set focus on browser

本文关键字:浏览器 焦点 设置 ShellExecute url      更新时间:2023-10-16

我在GUI应用程序(使用Win API创建)中使用ShellExecute在用户的默认浏览器中打开给定的超链接,如:

ShellExecute(0, 0, "www.stackoverflow.com", 0, 0, SW_SHOWMAXIMIZED); // Just an example

这是有效的,并且网站在默认浏览器中正确打开。

但是,我希望浏览器在启动后能够获得焦点。目前,这只在某些时候起作用:比如说,我在按钮点击回调中执行如上所示的函数。然后它按预期工作,浏览器就会聚焦。

但是,单击按钮后需要一段时间才能打开浏览器。如果我同时将焦点设置为,比如编辑控件,那么编辑控件(以及整个GUI)会在浏览器在后台打开的情况下保持焦点。但我希望行为保持一致,这样无论用户在点击按钮后的短时间内进行了什么互动,浏览器都能始终占据焦点。

如何做到这一点?

我已经尝试了ShellExecuteExWaitForInputIdle,然后从进程ID中检索主窗口句柄。但是,这并不总是有效的,因为ShellExecuteEx并不总是返回进程ID(即使设置了SEE_MASK_NOCLOSEPROCESS)。。。

指定"open"作为第二个参数(操作),而不是0/NULL。