VC中调用外部EXE的方法及其思考

VC中调用外部EXE的方法及其思考

——每周杂谈 第004篇

作者:Tocy    时间:2012-05-26

1. windows下的system函数

system函数主要用在C语言下,但是在C++中也是可以使用,并且已经收录至C标准库中。函数原型如下:

用 法: int system(char *command);

功 能: 发出一个DOS命令

返回值:如果command为空,并且命令解释器存在,返回非零值。如果命令解释器不存在,返回0并设置errno为ENOENT。如果command不为空,函数返回是由具体的命令解释器的返回值确定的,也就是说只有执行的命令解释器返回0时该函数才会返回0.如果返回值为-1,则表示错误。

详细解释可以参考http://msdn.microsoft.com/en-us/library/277bwbdz(v=vs.80).aspx

或者在MSDN中搜索system function in C。

显然system函数执行的是dos命令,很难做到交互控制,但是这个函数使用起来非常简单。一个经常使用的命令暂停system("pause")。

当然这个函数说成VC下调用外部程序有点牵强。

 

2. WinExec

    Windows下提供的API函数。函数参数很简单,只有两个,原型如下:    

UINT WinExec(

LPCSTR lpCmdLine, // 命令路径

UINT uCmdShow // 显示方式

);

第一个参数命令行包含可执行程序的全路径和参数(参数是可选的)。第二个参数是显示方式较常用的有SW_SHOW、SW_MAXIMIZE、SW_MINIMIZE。

返回值:函数成功执行返回值大于31。否则失败。

该函数只能调用exe程序。

使用例子:

WinExec("Notepad.exe", SW_SHOW); // 打开记事本

MSDN中说明一种情况就是WinExec返回的条件是启动的进程调用GetMessage函数或者超时,所以如果对于实时性要求较高的话,使用该函数启动的进程最好尽快调用GetMessage函数。

详细参数可以参考:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms687393(v=vs.85).aspx

 

3. ShellExcute

原型如下: 
      HINSTANCE ShellExecute( 

  HWND hwnd,                //父窗口句柄 

LPCTSTR lpOperation,   //操作, 打开方式 "edit","explore","open","find","print","NULL" 

LPCTSTR lpFile,             //文件名,前面可加路径 

LPCTSTR lpParameters,  //参数

LPCTSTR lpDirectory,    //默认文件夹 

INT nShowCmd              //显示方式 

); 

使用方法如下:

// 打开C:\Test.txt 文件 

ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);

// 打开网页www.google.com 

ShellExecute(NULL, "open", "http://www.google.com",  NULL, NULL, SW_SHOWNORMAL);

// 打开目录D:\C++ 

ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL);

ShellExecute不支持定向输出。这个函数可以打开任意文件,会调用系统注册的程序来打开对应后缀名的文件。

该函数返回值的意义同WinExec函数。

链接:http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

 

4 创建新线程

使用CreateProcess函数创建子进程或者独立进程。

这个函数的具体使用这里不介绍。关系到多进程的问题,相对较为复杂,具体使用请参考msdn。很明显如果创建新的进程可以使用各种进程通信技术,更加灵活方便,但是相对的使用起来更为复杂,涉及到IPC知识。

    链接:http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx

 

注:版权所有,请勿用于商业用途,转载请注明原文地址。本人保留所有权利。

posted @ 2012-06-03 10:04  Tocy  阅读(1146)  评论(0编辑  收藏  举报