几种c++调用dos来调用exe程序的函数用法

1.system:

函数原型: system(" 命令字符串");

2.刚刚使用了一个函数

ShellExecute
  ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

  ShellExecute函数原型及参数含义如下:

  ShellExecute(

  HWND hwnd,           //父窗口句柄 (如:NULL,Handle等)

  LPCSTR lpOperation, //操作类型 (如:"open")*要加英文双引号

  LPCSTR lpFile,           //要进行操作的文件或路径

  LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL

  LPCSTR lpDirectory,    //指定默认目录,通常设为NULL

  INT nShowCmd          //文件打开的方式,以通常方式还是最大化或最小化显示,一般为SW_SHOWNORMAL

  ) 

示例代码:

头文件:#include <shellapi.h>

ShellExecute(null,_T("open"),_T("C:\\gifMake\\ffmpeg.exe"),_T("/c  -i rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4   -s 150*100 c:\\test.%d.flv"),NULL,SW_HIDE);

 

3.CreateProcess函数

BOOL CreateProcess(
  LPCTSTR lpApplicationName,
  LPTSTR lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCTSTR lpCurrentDirectory,
  LPSTARTUPINFO lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);


示例代码:

STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
	TCHAR szCommandLine[] = L"C:\\gifMake\\ffmpeg.exe -i rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4   -s 150*100 c:\\test.%d.flv";  
	ret = CreateProcess(L"/c C:\\gifMake\\ffmpeg.exe ", szCommandLine,  NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

其中需要注意的是第二个参数  lpcommandline这个值要加上第一个参数lpapplicationname 才能执行成功!

第一个和第二个函数都没弄懂怎么去强制关闭dos的程序窗口,不过CreateProcess函数有个方法:TerminateProcess(pi.hProcess, 0);

 // 关闭子进程的主线程句柄
 CloseHandle(pi.hThread);

 // 等待子进程的退出
 WaitForSingleObject(pi.hProcess, INFINITE);
 // 获取子进程的退出码
 GetExitCodeProcess(pi.hProcess, &dwExitCode);
 // 关闭子进程句柄
 CloseHandle(pi.hProcess);
 上面这些函数也是对线程的处理,还没有去用,有时间要试试。

你可能感兴趣的:(C++,cmd,dos)