【问题标题】:Force opening a webpage with Internet Explorer使用 Internet Explorer 强制打开网页
【发布时间】:2018-02-20 00:06:04
【问题描述】:

我需要使用 Internet Explorer 打开网页,即使它不是预定义的浏览器。

(例如,Chrome 是预定义的,但我想打开 www.ThisRunsOnlyOnInternetExplorer.com

如何做到这一点?当然ShellExecute我知道如何打开默认浏览器。

当然,这必须适用于所有 Windows 操作系统和所有 Internet Explorer 版本,因此我无法对 iexplorer.exe 的路径进行硬编码。

您能提出解决方案吗?

注意:如果有办法通过某些 API 获取 iexplorer.exe 的路径,那么诀窍就是 gtet 该路径,然后使用 ShellExecute 运行

PATH_TO_INTERNET_EXPLORER_EXE www.ThisRunsOnlyOnInternetExplorer.com

【问题讨论】:

  • 不是每个 Windows 版本的路径上都有 iexplore.exe 吗?然后你可以使用 ShellExecute iexplore www.ThisRunsOnlyOnInternetExplorer.com
  • 在我的 Windows 7 机器上它不在路径上
  • @Matthijs 无论如何你都是对的,大卫澄清了我的问题
  • 毫无疑问,您需要这样做,因为您没有提及细节,请知道这对您的某些用户来说会很烦人。人们选择他们的浏览器是有原因的,每当你覆盖他们的选择时,你就会增加他们的肾上腺素流量并增加他们的日常压力水平。请认真注意这一点。

标签: delphi internet-explorer shellexecute


【解决方案1】:

您不需要使用完全限定的路径。安装 IE 后,它会在 App Paths 注册表中注册自己。因此,您只需将iexplore.exe 发送到ShellExecute()

注意:CreateProcess() 不使用应用路径机制,因此您必须使用ShellExecute() 而不是CreateProcess()

【讨论】:

  • 啊...我看到ShellExecute(Handle,'open', PChar('iexplore.exe'), PChar (' www.ThisRunsOnlyOnInternetExplorer.com'), nil, SW_SHOWNORMAL) 有效。但是,如果我必须从命令行运行它,我应该怎么做?因为从命令行iexplore.exe www.ThisRunsOnlyOnInternetExplorer.com 不起作用;
  • @user 当您从 cmd.exe 执行此操作时,这不会通过 shell 和应用程序路径。它直接进入 CreateProcess。如果您从 Windows 运行对话框执行此操作,那么 shell 将重新发挥作用。但是您询问了如何在 Windows 程序中执行此操作,因此 cmd.exe 的问题是偶然的。
  • 好奇:MSDN 文档说,如果应用程序可以直接打开 URL,则必须定义 UseUrl DWORD 值并将其设置为“1”,否则将下载文档并提供指向传递给应用程序的本地副本。在我的机器上,iexplore.exe 的条目没有定义 UseUrl!。
  • @David 谢谢我不知道 cmd 和 run 之间的这种“微妙”区别。我从来没有意识到 ShellExecute 正在做 Windows Run 所做的工作。
  • Raymond Chen 已经谈到了 UseUrl 选项:blogs.msdn.com/b/oldnewthing/archive/2011/06/30/10181645.aspx 很有趣!
【解决方案2】:

试试 ShellExecute(handle, "open", "%PROGRAMFILES%\Internet Explorer\iexplore.exe", "http://google.com", NULL, SW_SHOWNORMAL);

我认为所有窗口都设置了程序文件。

编辑:我删除了其他内容,因为我不太明白这个问题。

【讨论】:

    【解决方案3】:

    我以前和你有同样的问题。我有谷歌浏览器作为我的默认浏览器,并想强制使用 IE 来访问某些特定的 URL。我找到了一个非常适合我的解决方案。我使用 ShellExecuteEx 并将文件类型指定为 IE.HTTP 或 IE.HTTPS。

    希望对你有帮助。

    FillMemory(@vShellExec, SizeOf(TShellExecuteInfo), 0);
    vShellExec.cbSize := SizeOf(vShellExec);
    vShellExec.fMask := SEE_MASK_CLASSNAME 或 SEE_MASK_NOCLOSEPROCESS 或 SEE_MASK_FLAG_NO_UI;
    vShellExec.Wnd := 0;
    vShellExec.lpFile := PChar(asURL);
    vShellExec.nShow := SW_ShowNormal;
    vShellExec.lpClass := PChar(sFileType); // 使用 IE.HTTP 或 IE.HTTPS
    vShellExec.lpVerb := PChar('Open');

    ShellExecuteEx(@vShellExec);

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多