您的位置:首页 > 其它

win32程序执行控制台命令并重定向输出到文件

2013-08-28 22:10 375 查看
ShellExecute系列函数,可以执行控制台命令,但是无法实现输出重定向。

system函数,可以执行命令,并实现输出重定向,但是无法隐藏控制台窗口。

CreateProcess函数,则既可以执行命令,又可以实现输出重定向,同时不显示控制台窗口。

但是,CreateProcess函数的使用显得有些复杂。

我们可以将他包装一下,让他变得和ShellExecute或system一样好用。

下面的函数my_exec就实现了这种包装。

通过my_exec执行命令,并实现输出重定向非常方便。

例如,执行ping命令,将结果输出到c:\haha.txt中。则按如下方式调用即可。

my_exec(TEXT("ping www.csdn.net"), TEXT("c:\\haha.txt"), -1);

再如,执行dos命令dir,并将结果输出到c:\fff.txt中。则按如下方式调用即可。

my_exec(TEXT("cmd.exe /c dir d:") , TEXT("c:\\fff.txt"), -1);

好了,函数my_exec的代码实现如下。

int my_exec(TCHAR *cmd, TCHAR *output_file, int wait_time_sec)

{

PROCESS_INFORMATION pi;

STARTUPINFO si;

BOOL ret = FALSE;

DWORD flags = CREATE_NO_WINDOW;

HANDLE h;

SECURITY_ATTRIBUTES sa;

sa.nLength = sizeof(sa);

sa.lpSecurityDescriptor = NULL;

sa.bInheritHandle = TRUE;

h = CreateFile(output_file,

FILE_APPEND_DATA,

FILE_SHARE_WRITE | FILE_SHARE_READ,

&sa,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

NULL );

ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) );

ZeroMemory( &si, sizeof(STARTUPINFO) );

si.cb = sizeof(STARTUPINFO);

si.dwFlags |= STARTF_USESTDHANDLES;

si.wShowWindow =SW_HIDE;

si.hStdInput = NULL;

si.hStdError = NULL;

si.hStdOutput = h;

ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi);

WaitForSingleObject(pi.hProcess, -1==wait_time_sec?INFINITE:wait_time_sec*1000 );

CloseHandle(h);

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

return ret;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐