在 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# 无法完成的事情?