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 后缀的情况下使用它并处理对话 ;)