【问题标题】:ShellExecute url in browser does not always set focus on browser浏览器中的 ShellExecute url 并不总是将焦点放在浏览器上
【发布时间】:2017-06-28 01:18:41
【问题描述】:

我在 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)...

【问题讨论】:

  • 你用的是什么浏览器? This SO question 谈论 Chrome。
  • 我使用 mozilla ......但我更喜欢一个不管使用什么浏览器都可以工作的浏览器,因为我不能假设 GUI 的每个用户也默认使用这个浏览器(甚至安装)跨度>
  • @RawN: ShellExecuteEx 使用任何给定用户选择的默认浏览器。
  • @IInspectable 是的。该问题旨在发现 OP 是否使用 chrome 作为默认浏览器。
  • @SampleTime:您所要求的基本上不在您的手中。你不能真的强迫浏览器获得焦点,浏览器必须自己处理。

标签: c++ winapi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多