当前位置:C++技术网 > 资讯 > 在程序写代码启动/调用浏览器和外部程序

在程序写代码启动/调用浏览器和外部程序

更新时间:2015-06-23 15:33:19浏览次数:1+次

    下面的代码是使用两种方式实现启动外部程序或者浏览网页的完整代码,可以直接运行。程序里有详细注释。如果你要使用,请认真把里面的每一处弄明白,不要当码农,不要只知道复制粘贴,弄明白用起来也灵活。不懂就在后面提问。

#include <iostream>
#include <Windows.h>
#include <tchar.h>
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    bool sel=false; 
    cout<<"请选择启动方式:\n0:ShellExecute \t1:CreateProcess\t\n";
    cin>>sel;
    if(sel)
    {
        //CreateProcess
        //TCHAR szCmdLine[]=_T("C:\\Program Files\\完美娱乐网站\\完美记事3.2\\完美记事 D:\\myword.st");
        //TCHAR szCmdLine[]=_T("notepad D:\\myword.txt");
        TCHAR szCmdLine[]=_T("C:\\Program Files\\Internet Explorer\\iexplore.exe http://www.cjjjs.com");
        //传递任意程序的绝对路径,加上空格,空格后附上传递的参数,此处就是启动的完美记事软件,后面是文件路径,系统自动添加后缀名exe
        //启动程序或者打开浏览器都在命名行指定,如果IE浏览器路径在环境变量中,则不用写全路径,
        //否则因为它也不在系统目录下,所以自动搜索搜不到就会启动失败
        STARTUPINFO si = {sizeof(si)};//启动信息结构体,接受启动信息,使用前必须初始化size成员,这是简洁的写法。
        PROCESS_INFORMATION pi;//进程信息结构体,接受进程信息,有进程线程句柄和进程线程ID
        if(!CreateProcess(NULL,szCmdLine,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi))
        {
            ::MessageBox(NULL,_T("启动失败!"),_T("启动程序提示"),0);
        }
        CloseHandle(pi.hProcess);
        //解除当前进程对启动的进程的引用,启动的进程结束后,其引用数就为0了,系统就可以自动释放启动进程的资源,避免资源泄露
        ResumeThread(pi.hThread);
        //恢复进程的执行,实际上是恢复这个进程的主线程执行,如果创建标志为0,即第六个参数为0,则立即启动,就不需要这个恢复函数了

        //第一个参数是程序名称,必须是含有扩展名的,系统不自动添加。
        //第二个是命令行,命令行传递程序名和参数,以空格分隔,
        //系统默认把空格前的字符串作为程序名,如果没有扩展名则自动加上扩展名,一般在第二个参数传递程序名和参数
        //第三第四个参数是进程安全和线程安全描述,传递空表示使用系统默认的安全描述
        //第五个参数指示是否继承父进程的资源,只是启动外部的进程,选择FALSE不继承
        //第六个参数选择0表示启动后立即执行,还有一个CREATE_SUSPENDED表示挂起进程,之后使用恢复线程函数ResumeThread使之运行。
        //因为启动外部程序其实是一个单线程进程,因此恢复线程函数就可以使其线程运行,没有恢复进程的函数。
        //第七个第八个为环境变量和目录,忽略即可
        //第九个和第十个分别为启动信息和进程信息,用来接受系统启动进程后传递进来的信息。
    }else
    {
        //ShellExecute
        const TCHAR szOperator[]=_T("open");//打开操作,用来打开程序,文件
        const TCHAR szProgramName[]=_T("notepad");//指定系统程序的名字或者指定的任意程序的EXE文件所在的绝对路径
        const TCHAR szParam[]=_T("d:\\myword.txt");//给相应的程序传递参数,可以不传
        ShellExecute(NULL,szOperator,szProgramName,szParam,NULL,SW_SHOWNORMAL);
        //启动程序,第一个参数是句柄,倒数第二个是指定目录,也可以忽略
        //最后一个是显示方式,正常即可,也可以指定最大化SW_SHOWMAXIMIZED最小化SW_SHOWMINIMIZED显示

        //const TCHAR szOperator[]=_T("open");
        //const TCHAR szProgramName[]=_T("http://www.cjjjs.com");
        //启动IE打开浏览器,如果要启动其他浏览器,可以在上面方式中指定浏览器程序位置和传递网址参数即可
        //ShellExecute(NULL,szOperator,szProgramName,NULL,NULL,SW_SHOWNORMAL);
    }
    return 0;
}