VC运行一个程序或CMD

//运行一个CMD命令,并返回运行结果
BOOL  RunCmd(CString cstrCmd,CString &cstrResult)
{
	if(cstrCmd.IsEmpty())
	{
		return TRUE;
	}
    
	cstrCmd="cmd /k"+cstrCmd;//加上"cmd /k"是为了能执行类似dir的命令 应该用/c ,/k cmd 进程不会关闭

	SECURITY_ATTRIBUTES sa;
	HANDLE hRead,hWrite;
	sa.nLength = sizeof(SECURITY_ATTRIBUTES);
	sa.lpSecurityDescriptor = NULL;
	sa.bInheritHandle = TRUE;

	//创建命名管道
	if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
		//MessageBox("Error On CreatePipe()");
		return FALSE;
	}
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	si.cb = sizeof(STARTUPINFO);
	GetStartupInfo(&si);
	si.hStdError = hWrite;//数据输出用的文件句柄
	si.hStdOutput = hWrite;//数据输出用的文件句柄
	si.wShowWindow = SW_HIDE;
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

	if (!CreateProcess(NULL,(LPSTR)cstrCmd.GetString()//执行cmd命令,并在命名中管道中写入cmd命令返回的串
		,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) 
        {
                //可以指定程序的启动路径,si前面的那个参数,这里使用默认的。
//MessageBox("Error on CreateProcess()");

		return FALSE;
	}
	/*if(WaitForSingleObject(pi.hProcess, INFINITE)==WAIT_FAILED)//这里决定是否要等整个命令执行完,如ping等耗时较多的命令.
	{
		//MessageBox("Failed!");
		return FALSE;
	}*/
	CloseHandle(hWrite);
	
	char buffer[4096] ={0} ;
	DWORD bytesRead;
	BOOL bRet;
	cstrResult="";
	do 
	{
		memset(buffer,0,4096);
		bRet=ReadFile(hRead,buffer,4096,&bytesRead,NULL);//从命名管道中读取数据
		if(bRet)
		{
			cstrResult += buffer;
		}

	} while (bRet&&bytesRead);

	CloseHandle(hRead);
	return TRUE;
}
调用命令行程序并获取返回信息<a target=_blank href="http://www.cnblogs.com/acloud/archive/2012/08/30/2663395.html">http://www.cnblogs.com/acloud/archive/2012/08/30/2663395.html</a>
std::string ExeCmd(const char * pszCmd)
{
    //创建匿名管道
    SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
    HANDLE hRead, hWrite;
    if (!CreatePipe(&hRead, &hWrite, &sa, 0))
    {
        return "";
    }    //设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite)
    STARTUPINFO si = {sizeof(STARTUPINFO)};
    GetStartupInfo(&si);
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.wShowWindow = SW_HIDE;
    si.hStdError = hWrite;
    si.hStdOutput = hWrite;    //启动命令行
    PROCESS_INFORMATION pi;
    if (!CreateProcess(NULL, (char *)pszCmd, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
    {
        return "";
    }    //立即关闭hWrite
    CloseHandle(hWrite);    //读取命令行返回值
    std::string strRet;
    char buff[1024] = {0};
    DWORD dwRead = 0;
    while (ReadFile(hRead, buff, 1024, &dwRead, NULL))
    {
        strRet.append(buff, dwRead);
    }
    CloseHandle(hRead);                                                                                                             return strRet;
}
//运行一个应用程序,可以选择是否等待
bool RunApplication(LPCTSTR lpApplicationName, LPCTSTR lpCommandLine, WORD wShowWindow = SW_NORMAL, bool bWaitAppExit = false);
bool RunApplication(LPCTSTR lpApplicationName, LPCTSTR lpCommandLine, WORD wShowWindow, bool bWaitAppExit)
{
    TCHAR tszCommandLine[MAX_PATH] = { 0 };
    if (lstrcmp(lpApplicationName,_T(""))!=0)
    {
        lstrcpy(tszCommandLine, lpApplicationName);
        lstrcat(tszCommandLine, _T(" "));
    }

    lstrcat(tszCommandLine, lpCommandLine);

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    si.dwFlags |= STARTF_USESHOWWINDOW;
    si.wShowWindow = wShowWindow;

    BOOL bRet = CreateProcess(NULL,  //可执行模块名     No module name (use command line).
        tszCommandLine,   //  命令行字符串 
        NULL,                   // 进程的安全属性
        NULL,                   // 线程的安全属性
        FALSE,                  // 句柄继承标志
        NORMAL_PRIORITY_CLASS,  // 创建标志
        NULL,                   // 指向新的环境块的指针
        NULL,                   // 指向当前目录名的指针
        &si,                    // 指向启动信息结构的指针
        &pi);                   // 指向进程信息结构的指针

    if (!bRet)
    {
        return false;
    }
    // Wait until child process exits.
    if (bWaitAppExit)
    {
        if (WaitForSingleObject(pi.hProcess, INFINITE)==WAIT_FAILED)//这里决定是否要等待
        {
            return false;
        }
    }
    
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);

    return true;
}


<pre name="code" class="cpp">//SHELLEXECUTEINFO 和 ShellExecuteEx 使用  http://blog.csdn.net/weilely123/article/details/17393805
bool execute(CString fileName, CString args, CString baseDir, bool wait)
{
    SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFOW) };

    sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;

    sei.lpFile = fileName;//可执行文件名字
    sei.lpParameters = args;//参数
    sei.lpDirectory = baseDir;//目录
    sei.nShow=SW_SHOW;

    if (!ShellExecuteEx(&sei)) {
        return false;
    }

    if (wait) {
        HANDLE hProcess = sei.hProcess;
        if (hProcess != 0) {
            WaitForSingleObject(hProcess, INFINITE);
            CloseHandle(hProcess);
        }
    }

    return true;
} 




比较完整的命令大全 net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: \\ip\c$ 登陆后映射对方C:到本地为H: net use \\ip\ipc$ /del 删除IPC链接 net use h: /del 删除映射对方到本地的为H:的映射 net user 用户名 密码 /add 建立用户 net user guest /active:yes 激活guest用户 net user 查看有哪些用户 net user 帐户名 查看帐户的属性 net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数 net start 查看开启了哪些服务 net start 服务名  开启服务;(如:net start telnet, net start schedule) net stop 服务名 停止某服务 net time \\目标ip 查看对方时间 net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息 net view 查看本地局域网内开启了哪些共享 net view \\ip 查看对方局域网内开启了哪些共享 net config 显示系统网络设置 net logoff 断开连接的共享 net pause 服务名 暂停某服务 net send ip "文本信息" 向对方发信息 net ver 局域网内正在使用的网络连接类型和信息 net share 查看本地开启的共享 net share ipc$ 开启ipc$共享 net share ipc$ /del 删除ipc$共享 net share c$ /del 删除C:共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值