c/c++代码中执行cmd命令

转自
[url]http://blog.csdn.net/slixinxin/article/details/51455335[/url]

[b][size=medium]代码中执行cmd命令有多重方法:[/size][/b]

[b][color=red]第一种:可以直接打开对应文件(文件夹),但不能定位到相应文件[/color][/b]

::ShellExecute(NULL, _T("open"), "d:\CodeSpace\FileRecv\mcisendstring.txt", NULL, NULL, SW_SHOWNORMAL);


[color=red][b]第二种:可以再打开文件夹的同时定位到相应的文件[/b][/color]

::ShellExecute(NULL, L"open", L"explorer.exe", "/select,d:\CodeSpace\FileRecv\mcisendstring.txt", NULL, SW_SHOWNORMAL);


对于前两种的cmd执行方式,一般是用于打开文件或者链接之类的,另外的一些命令需要用到下面的方法:

[color=red][b]第三种:用于直接打开一个可执行文件,并且可以等待其执行完成,适用于单线程[/b][/color]


do
{
DWORD lResult;
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo = {sizeof(STARTUPINFO)};

//PROCESS_INFORMATION pi;
//ZeroMemory(&si,sizeof(STARTUPINFO));
//si.cb = sizeof(STARTUPINFO);
//GetStartupInfo(&si);
//si.wShowWindow = SW_HIDE; //隐藏窗口
//si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

if(!CreateProcess(NULL, "uclient.exe /c", NULL, NULL, FALSE, NULL, NULL, NULL, &siStartInfo, &piProcInfo))
break;


WaitForSingleObject(piProcInfo.hProcess, INFINITE);
if(GetExitCodeProcess(piProcInfo.hProcess, &lResult) && lResult != -1 && lResult>0)
{
DebugInfoA("客户端有 %d 个文件可升级最新版", lResult);
int nresult = MessageBox(NULL, "有新版本可以升级,是否立即升级?", "客户端版本升级", MB_OKCANCEL);
if(IDOK == nresult)
{
CreateProcess(NULL, "uclient.exe /u", NULL, NULL, FALSE, NULL, NULL, NULL, &siStartInfo, &piProcInfo);
return 0;
}
}
}while(FALSE);


[color=red][b]第四种:用于调用一个外部可执行文件执行相应命令,并且可以等待其执行完成,适用于单线程,其他部分代码同上一种[/b][/color]

if(!CreateProcess(NULL, "7za.exe a \"d:\CodeSpace\Face.7z\" -o \"d:\CodeSpace\Face/*\"", NULL, NULL, FALSE, NULL, NULL, NULL, &siStartInfo, &piProcInfo));
if(!CreateProcess(NULL, "7za.exe x \"d:\CodeSpace\Face.7z\" -o \"d:\CodeSpace\Face\"", NULL, NULL, FALSE, NULL, NULL, NULL, &siStartInfo, &piProcInfo));


[color=red][b]第五中:system 函数,可以直接执行输入到cmd里面的命令,但是代码中执行过程中会出现黑屏的闪烁,无法隐藏
[/b][/color]

system(“copy \"C:\Users\s810.png\" \"d:\CodeSpace\719950C424FC405CA6139EDFB99F4E08.png\"”);


[color=red][b]第六种:WinExec 函数(可以直接执行cmd命令以及调用cmd执行命令,并且可以隐藏窗口)[/b][/color]

WinExec("cmd.exe /c copy \"C:\Users\s810.png\" \"d:\CodeSpace\s893CD.png\"", SW_HIDE);



相关用法:

ex1: WinExec("Notepad.exe c:\\autoexec.bat",SW_SHOW); 执行 notepad.exe 并正常显示器窗口
ex2: WinExec("Notepad.exe",SW_SHOWMINIMIZED); 执行 notepad.exe 但最小化其窗口
ex3: WinExec("Command.com /c dir c:\\",SW_SHOW); 执行 dir C:\ ,完成后关闭 MSDOS 窗口
ex4: WinExec("Command.com /k dir c:\\",SW_SHOW); 执行 dir C:\ ,完成后不关闭 MSDOS 窗口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值