【发布时间】:2017-06-28 01:18:41
【问题描述】:
我在 GUI 应用程序(使用 Win API 创建)中使用 ShellExecute 在用户的默认浏览器中打开给定的超链接,例如:
ShellExecute(0, 0, "www.stackoverflow.com", 0, 0, SW_SHOWMAXIMIZED); // Just an example
这可行,并且该站点在默认浏览器中正确打开。
但是,我希望浏览器在启动后获得焦点。目前这仅在某些情况下有效:假设我在按钮单击回调中执行如上所示的函数。然后它按预期工作并且浏览器获得焦点。
但是,从单击按钮到打开浏览器需要一些时间。如果我同时将焦点设置为编辑控件,则编辑控件(以及整个 GUI)在后台打开浏览器时保持焦点。但我希望行为保持一致,以便浏览器始终占据焦点,而不管用户在点击按钮后的一小段时间内进行的交互如何。
如何做到这一点?
我已经尝试过ShellExecuteEx 和WaitForInputIdle,然后从进程 ID 中检索主窗口句柄。不幸的是,这不起作用,因为ShellExecuteEx 并不总是返回进程ID(即使设置了SEE_MASK_NOCLOSEPROCESS)...
【问题讨论】:
-
你用的是什么浏览器? This SO question 谈论 Chrome。
-
我使用 mozilla ......但我更喜欢一个不管使用什么浏览器都可以工作的浏览器,因为我不能假设 GUI 的每个用户也默认使用这个浏览器(甚至安装)跨度>
-
@RawN:
ShellExecuteEx使用任何给定用户选择的默认浏览器。 -
@IInspectable 是的。该问题旨在发现 OP 是否使用 chrome 作为默认浏览器。
-
@SampleTime:您所要求的基本上不在您的手中。你不能真的强迫浏览器获得焦点,浏览器必须自己处理。