System() 函数,并从中调用 Internet Explorer,DevC++
System() function, and calling internet explorer from it, DevC++
我尝试制作一个程序来获取网站信息,然后将其提供给 system()
以启动网站。我知道像 (\, ",')
这样的字符不会直接输入输出,所以我使用了转义序列。
我写了这个程序,但命令提示符只是拒绝通过 C:\
路径。但是如果我复制粘贴程序显示的命令,Internet Explorer 就会启动。但我的程序并非如此。谁能告诉我哪里出错了?
这是我的代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
cout<<"Please enter the website you wish to visit: ";
string website,web;
cin>>web;
web= " " + web;
website = "\"%ProgramFiles%\Internet Explorer\iexplore\""+web;
cout<<"\n"<<website<<endl<<endl<<endl;
system(website.c_str());
return 0;
}
您正在 system
命令行中使用环境变量 %ProgramFiles%;这些特定于 MS-DOS 提示符环境,通常在 system
实现中不可用。
我建议用完整路径替换它,例如 \"C:\Program Files\Internet Explorer\iexplore\",看看是否可行。
如果可行,那么您的实现不会像完整的命令提示符那样隐式替换环境变量,因此您需要单独查询环境变量并在 运行 system
。请参阅 getenv 了解一种可能的方式(我不确定 mingw32 支持什么,因此您可能还有其他选择)。
如果这不能解决问题,我建议检查您是否可以启动更简单的东西,例如 notepad.exe,以验证没有任何东西干扰启动应用程序,例如您的环境路径或权限。
用双引号传递:
website = "\"\"%ProgramFiles%\Internet Explorer\iexplore\"\""+web;
system("something")
调用实际上以与 cmd /c something
类似(但可能不相同)的方式运行命令解释器 cmd
。当命令名称中有空格时,这会产生影响,请参见例如 this。我不能确切地说出为什么 单双引号 在不涉及环境变量时起作用,否则不起作用,但事实是,双引号确实起作用。
如果您想启动用户首选的浏览器,请考虑调用
system("start http://" + websitename);
相反。
首先获取该环境变量值。
#include <iostream>
#include <ShlObj.h>
int main() {
char pathToPf[MAX_PATH];
if (S_OK == SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, pathToPf))
std::cout << pathToPf << std::endl;
return 0;
}
See SHGetFolderPath
documentation...
请注意,我很懒,使用了此函数的 ASCII 版本。在没有 A 后缀的情况下使用它并处理对话 ;)
我尝试制作一个程序来获取网站信息,然后将其提供给 system()
以启动网站。我知道像 (\, ",')
这样的字符不会直接输入输出,所以我使用了转义序列。
我写了这个程序,但命令提示符只是拒绝通过 C:\
路径。但是如果我复制粘贴程序显示的命令,Internet Explorer 就会启动。但我的程序并非如此。谁能告诉我哪里出错了?
这是我的代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
cout<<"Please enter the website you wish to visit: ";
string website,web;
cin>>web;
web= " " + web;
website = "\"%ProgramFiles%\Internet Explorer\iexplore\""+web;
cout<<"\n"<<website<<endl<<endl<<endl;
system(website.c_str());
return 0;
}
您正在 system
命令行中使用环境变量 %ProgramFiles%;这些特定于 MS-DOS 提示符环境,通常在 system
实现中不可用。
我建议用完整路径替换它,例如 \"C:\Program Files\Internet Explorer\iexplore\",看看是否可行。
如果可行,那么您的实现不会像完整的命令提示符那样隐式替换环境变量,因此您需要单独查询环境变量并在 运行 system
。请参阅 getenv 了解一种可能的方式(我不确定 mingw32 支持什么,因此您可能还有其他选择)。
如果这不能解决问题,我建议检查您是否可以启动更简单的东西,例如 notepad.exe,以验证没有任何东西干扰启动应用程序,例如您的环境路径或权限。
用双引号传递:
website = "\"\"%ProgramFiles%\Internet Explorer\iexplore\"\""+web;
system("something")
调用实际上以与 cmd /c something
类似(但可能不相同)的方式运行命令解释器 cmd
。当命令名称中有空格时,这会产生影响,请参见例如 this。我不能确切地说出为什么 单双引号 在不涉及环境变量时起作用,否则不起作用,但事实是,双引号确实起作用。
如果您想启动用户首选的浏览器,请考虑调用
system("start http://" + websitename);
相反。
首先获取该环境变量值。
#include <iostream>
#include <ShlObj.h>
int main() {
char pathToPf[MAX_PATH];
if (S_OK == SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, pathToPf))
std::cout << pathToPf << std::endl;
return 0;
}
See SHGetFolderPath
documentation...
请注意,我很懒,使用了此函数的 ASCII 版本。在没有 A 后缀的情况下使用它并处理对话 ;)