在 VC++ 中无法使用 CreateProcess() 打开 URL

Posted

技术标签:

【中文标题】在 VC++ 中无法使用 CreateProcess() 打开 URL【英文标题】:Unable to open URL using CreateProcess() in VC++ 【发布时间】:2014-04-21 09:55:20 【问题描述】:

我正在尝试编写代码 sn-p 以从我的 VC++ 应用程序代码中打开 google chrome 中的 URL,而我系统的默认浏览器仍然仅是 Internet Explorer。

// Existing VC++ Code used in application to open the URL in Internet Explorer(Default browser)
ShellExecute (NULL, "open", pURLinfo->szURL, NULL, NULL, SW_SHOWNORMAL);

参考下面的 *** 链接,我得到了下面的代码更改

How to launch Chrome maximized via shell execution?

// VC++ Code change to open the URL in Google Chrome
PROCESS_INFORMATION processInformation;
STARTUPINFO startupInfo;

memset(&processInformation, 0, sizeof(processInformation));
memset(&startupInfo, 0, sizeof(startupInfo));

startupInfo.cb = sizeof(startupInfo);
startupInfo.wShowWindow = SW_SHOWMAXIMIZED;

CreateProcess("C:\Program Files\Google\Chrome\Application\chrome.exe",pURLinfo->szURL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInformation);
//VC++ Code change to open the URL in Google Chrome

我了解通过 ShellExecute() 无法实现打开 URL 的要求,因为 shellExecute 只会打开默认浏览器,CreateProcess() 代码构建时不会出错,但不会在 Chrome 浏览器中打开 URL。单击 URL 的按钮,没有任何反应。谁能指出代码的 CreateProcess 部分有什么问题?..

提前致谢!

更新:

如下重写 CreateProcess 时,chrome 浏览器打开,但它是空白的。

CreateProcess("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",pURLinfo->szURL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInformation);

有人可以说明如何在 CreateProcess() 中传递 URL,因为现在 Chrome 浏览器会在执行 CreateProcess() 时打开。

【问题讨论】:

【参考方案1】:

Chrome 希望在 URL 前面的命令行中出现“--”(两个破折号)。你需要这样的东西:

string commandLine = "\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\"";
commandLine += " -- ";
commandLine += pURLinfo->szURL;
CreateProcess(commandLine.c_str(), NULL, NULL, NULL, FALSE,
              CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInformation);

ShellExecute 也应该可以工作:

string program = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
string params = " -- ";
params += pURLinfo->szURL;
ShellExecute(NULL, "open", program.c_str(), params.c_str(), NULL, SW_SHOWNORMAL);

【讨论】:

以上是关于在 VC++ 中无法使用 CreateProcess() 打开 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 VC++(本机)中可以完成哪些 VC# 无法完成的事情?

在 MATLAB 中识别 VC++ 编译器

有没有使用 pywin32 createprocessasuser 并获取输出的好例子?

VC中使用openGL链接显示 无法解析的外部符号

VC中使用openGL链接显示 无法解析的外部符号

无法在 32 位机器上注册使用 VS2012/VC++ 构建的 COM DLL