zoukankan      html  css  js  c++  java
  • VC中调用其它程序

    1、system

    格式:int system(char * command);

    2、WinExec

    格式: UINT WinExec(
           LPCSTR lpCmdLine,    // 命令路径
           UINT uCmdShow       // 显示方式
    ;

    3、ShellExecute

           HINSTANCE ShellExecute(
           HWND hwnd,            //父窗口句柄
           LPCTSTR lpOperation,    //操作, 打开方式 "edit","explore","open","find","print","NULL"
           LPCTSTR lpFile,          //文件名,前面可加路径
           LPCTSTR lpParameters,    //参数
           LPCTSTR lpDirectory,     //默认文件夹
           INT nShowCmd           //显示方式
    );

    4、CreateProcess

     BOOL CreateProcess(
           LPCTSTR lpApplicationName, //执行程序名
           LPTSTR lpCommandLine,   // 参数行
           //下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性

           LPSECURITY_ATTRIBUTES lpProcessAttributes,   // process security attributes
           LPSECURITY_ATTRIBUTES lpThreadAttributes,    // thread security attributes

           BOOL bInheritHandles,   // 继承标志
           DWORD dwCreationFlags, // 创建标志
           LPVOID lpEnvironment,   // 环境变量
           LPCTSTR lpCurrentDirectory,    // 运行该进程的初始目录
           LPSTARTUPINFO lpStartupInfo,   // 用于在创建子进程时设置各种属性
           LPPROCESS_INFORMATION lpProcessInformation //用于在进程创建后接受相关信息
          ; 

    #include <afxwin.h>
    #define EXECDOSCMD "dir c:" //可以换成你的命令
    void main()
    {
    	SECURITY_ATTRIBUTES sa;
    
    	HANDLE hRead,hWrite;
    
    	sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    	sa.lpSecurityDescriptor = NULL;
    	sa.bInheritHandle = TRUE;
    
    	if (!CreatePipe(&hRead,&hWrite,&sa,0))
    	{
    		AfxMessageBox("创建通道失败");
    		return ;
    	}
    
    	char command[1024]; //指定命令行的大小
    	strcpy(command,"Cmd.exe /C ");
    	strcat(command,EXECDOSCMD);
    
    	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;
    
    	//关键步骤,CreateProcess函数参数意义请查阅MSDN
    
    	if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
    	{
    		CloseHandle(hWrite);
    		CloseHandle(hRead);
    		return ;
    	}
    
    	CloseHandle(hWrite);
    
    	char buffer[4096] = {0}; //用4K的空间来存储输出的内容
    	DWORD bytesRead;
    	while (true)
    	{
    
    		if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
    			break;
    		AfxMessageBox(buffer); //这里是弹出对话框显示
    	}
    
    	CloseHandle(hRead);
    }
    

     注意:

      在用CreateProcess方法执行dos命令时,有可能不能执行成功。些时可以将编译的版本变为Release版本就可以成功执行。

  • 相关阅读:
    程序猿小白博客报道
    UML
    mysql隔离级别相关
    mac使用相关笔记
    git相关
    maven相关
    springboot相关
    guava
    IDEA高效运用技巧
    spring事务相关
  • 原文地址:https://www.cnblogs.com/wang-can/p/3313897.html
Copyright © 2011-2022 走看看