【问题标题】:Set default browser in C++ builder 5在 C++ builder 5 中设置默认浏览器
【发布时间】:2012-10-21 20:53:22
【问题描述】:

我正在使用 C++ builder 5 并在我的程序中获得了一些链接。如果没有默认选项,我希望这些链接在默认系统浏览器或 firefox 中打开。

我用过:

ShellExecute(NULL, "open", "http://maps.google.nl/maps?f=q&hl=nl&q=", NULL, NULL, SW_SHOWNORMAL); 

但对于某些链接,它不适用于已经存在的代码。

// this is not working
     case 4: if(Qry_shipment->RecordCount == 0){return;}
                         webaddress =    "http://maps.google.nl/maps?f=q&hl=nl&q=";

                    //we need the info from clicked shipment-not from overflow
                    if(Qry_shipment->FieldByName("tstohn")->AsString == pAuthorization[7])
                    {
                            webaddress =    webaddress
                                            + Qry_shipment->FieldByName("tslpla")->AsString  + ","
                                            + Qry_shipment->FieldByName("tslzcd")->AsString  + ","
                                            + Qry_shipment->FieldByName("lalaad")->AsString;
                    }
                    else
                    {
                            webaddress =    webaddress
                                            + Qry_shipment->FieldByName("tsupla")->AsString  + ","
                                            + Qry_shipment->FieldByName("tsuzcd")->AsString  + ","
                                            + Qry_shipment->FieldByName("lalos")->AsString;

                    }
                    break;

可能有一些代码,所以我可以为它自己的程序定义默认浏览器,这样我就不必编辑所有链接。

【问题讨论】:

  • 你到底有什么问题?浏览器是否显示但没有打开您的页面(确保您的 URL 构造正确),还是 ShellExecute 自身失败?
  • ShellExecute 使用默认浏览器打开 URL。如果您在从数据库中添加参数时代码失败,请告诉我们失败的完整 URL。由于我不是通灵者,我无法推断出您数据库的内容...

标签: c++ c++builder c++builder-5


【解决方案1】:

由于您使用的是 C++ Builder 5,我假设主机操作系统是 Windows。因此,无需关心多平台问题。

Windows 有一个“启动”命令。根据参数,它将启动关联的可执行文件。所以你可以试试:

system( "start http://maps.google.nl/" );

只要参数以http:// 开头,我认为你不会有任何问题。您可能可以将其移至 ShellExecute(),但不幸的是我没有 C++ Builder 来检查它。

希望这会有所帮助。

【讨论】:

  • @stan 我希望程序打开默认系统浏览器而不是 IE。我不知道如何重写代码,所以它会工作。
  • 但在我的系统(Windows 7)中,它会打开默认浏览器,在我的情况下是 firefox...
  • 是的,在我的系统上也是如此,但是如何添加参数? + Qry_shipment->FieldByName("tsupla")->AsString + "," + Qry_shipment->FieldByName("tsuzcd")->AsString + "," + Qry_shipment->FieldByName("lalos")->AsString;跨度>
  • 你的意思是和下面的例子一样吗? system("start google.com/#hl=es&q=teddybears") 在这个例子中,你有参数 hl=es 和 q=teddybears...问题出在哪里? (注意 stackoverflow 隐藏了 http:// 部分)
【解决方案2】:

如果我正确理解了您的问题(和其他评论),您目前遇到ShellExecute 的问题,它会启动 IE 而不是默认浏览器。如果是这样,您可以尝试以下方法。

  1. 默认系统浏览器在系统注册表中的路径HKEY_CLASSES_ROOT\http\shell\open\command 中注册。可能还有其他位置,但您可以从这个位置开始,看看它是否适用于大多数系统。你应该从你的代码中阅读这个条目,你会得到一个确切的命令行来启动默认浏览器。

  2. Windows 支持一种特殊类型的文件 - *.url 文件(它们只是文本文件)。它们可用于通过默认浏览器打开特定的 url。你可以生成一个临时的*.url文件,内容如下:

[互联网快捷方式]

URL=http://www.domain.com/path?query

拥有这样一个文件,您可以像往常一样使用ShellExecute执行它。

【讨论】:

  • 默认浏览器完美运行,但我不知道如何向 shellexecute 命令添加任何参数。所以我可以在网址中添加东西。
  • @user1746378 从您的问题中可以看出,您可以根据需要附加参数,然后您可以使用此 URL 执行浏览器。我提到的任何一种方式都应该有效。例如,如果您从注册表中获取 "C:\Program Files\Google\Chrome\chrome.exe" -- "%1",则只需将 %1 替换为您的 URL 并运行整个命令。使用 Internet 快捷方式,只需将您的完整 URL 放在 URL 键中。
  • 但是没有办法告诉程序不要使用 IE 而是使用另一个浏览器
  • @user1746378 我上面展示的两种方法都在我的 PC 上运行 Chrome(不是 IE)。如果 IE 是您 PC 上的默认浏览器,则这些方法将启动 IE。
  • 好的,如果您看一下我提供的代码,您将如何实现 Internet 快捷方式?你能举个例子吗?
【解决方案3】:

当您调用ShellExecute() 时,将lpOperation 参数设置为NULL 而不是"open"。这将执行 http:// 协议的 true 默认操作,因为 "open" 并不总是默认的注册动词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多