导航:首页 > 编程语言 > c启动外部程序参数

c启动外部程序参数

发布时间:2024-10-05 18:20:20

⑴ c++打开外部exe并输入指令

关于三个SDK函数: WinExec, ShellExecute,CreateProcess 的其他注意事项:
【1】定义头文件
必须定义以下两个头文件:
#include <shlobj.h> // 可替换为 windows.h
#include <shellapi.h>
如果定义了头文件 #include <windows.h>的话就不必定义 #include <shlobj.h>了。
【2】定义路径
C++中所表示的路径要用 " // "而不是平常所用的" / ",所以以上三个函数表示路径都为:disk://Directory//...//File name
WinExec("D://Program Files//Test//Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C://Test.txt",NULL,NULL,SW_SHOWNORMAL);
1、调用API: int system( const char *command );
你可以传入一命令,启动某个程序。如"ping www.vccode.com", "YourExe"等等
不过这里有几点要值得注意:
(1)、他不会立即返回,直到你启动的程序执行完成。
(2)、如果你启动是windows程序,它仍然会启动一个控制台,这就给人感觉太差劲了,但如果本身是控制台的,而且又需要等待它的完成,那这将是比较好的选择。
(3)、它的返回值代表是否执行成功以及程序的退出码。
(4)、不能运行*.txt文件或"www..com"

2、调用API:
UINT WinExec(
LPCSTR lpCmdLine, // command line
UINT uCmdShow // window style
);
这个API与API:system同样的使用简单,同用是使用命令行型式。
不过它与API:system相比,有几个优点:
(1)、它将启动了一个新进程,并且立即返回,因此你的程序无需等待。
(2)、它的多了一个参数:uCmdShow,通过它你可以一定程度上控件窗体的显示,比如让它后台运行而不显示出来。
(3)、它无论启动控制台程序还是windows程序都只做你想要做的事。

它的不足之处:
(1)、它完全与本进程脱离,无法对做些必要的控制
(2)、无法得知启动的程序是否退出。
(3)、得不到启动的程序的退出码。
(4)、不能运行*.txt文件或"www..com"
3、调用:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
它也有WinExec同样的缺点。
它虽然传回一个HINSTANCE,但他并不是真正的句柄,我们仅能拿它来做一些错误值检查。

但它的功能比前两者更强大,它执行系统的Shell命令。
1、2中如果传入“XX.txt”,它们将不能成功执行,ShellExecute却能很好地执行,它将启动一个默认的文字处理程序来打开它。
1、2中如果传入“www.vccode.com”,将不能成功执行,而ShellExecute却能很好地执行,它将启动一个默认浏览器来打开这个网站

参数讲解:
参数1hwnd:一窗体句柄,将作为启动的程序的父窗体。
参数2lpVerb:你想执行的操作(edit 、explore、find、open、print、properties),你也可以传入NULL值,它将执行默认操作(win2000以前与以后处理略有差别,请见MSDN)。
参数3lpFile:一文件名或操作的对象。
参数4lpParameters:如果lpFile是一可执行文件,这个将作为它的参数。它的格式由执行的操作决定。而且当lpFile为一document文件时,此参数需为NULL。
参数5lpDirectory:指定它的工作目录。
参数6nShowCmd:窗体显示的控制。

以下是几个例子:
//启动一个Dos命令, 启动windows程序相同
::ShellExecute(this->GetSafeHwnd(), NULL, "ping", "www.vccode.com", NULL, SW_SHOWNORMAL);

//打开一个文件
::ShellExecute(this->GetSafeHwnd(), "open", "ReadMe.txt", NULL, NULL, SW_SHOWNORMAL);
//上面的动词可传可不传,但如果"ReadMe.txt"为"ReadMe.bat"那就得指定,否则将会当命令执行,而不是打开它。

//可打开目录
::ShellExecute(this->GetSafeHwnd(), "open", "c:", NULL, NULL, SW_SHOWNORMAL);

//可打开网页
::ShellExecute(this->GetSafeHwnd(), "open", "www.vccode.com", NULL, NULL, SW_SHOWNORMAL);

//浏览一个目录
ShellExecute(handle, "explore", "c:"NULL, NULL, SW_SHOWNORMAL);

//查看一个文件或目录的属性
//使用ShellExecuteEx,实现请见所附源码对应部分

如果没有特殊的控制要求,它己能为我们做很了,但当我们一定要能控件这个启动的进程时,那我们就得使用第4点了。

4:调用API:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable mole
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
往往看到这个函数就让人生畏,它参数多,而且参数类型也如此莫生。是的,正是因为如此它才功能强大!
但不要怕,作为一般使用,非常简单!下面便是一个简单的例子(启动记事本):

STARTUPINFO StartInfo;
PROCESS_INFORMATION pinfo;
//对程序的启动信息不作任何设定,全部清0
memset(&StartInfo,0,sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小

BOOLret=CreateProcess(
NULL, //启动程序路径名
"notepad.exe", //参数(当exeName为NULL时,可将命令放入参数前)
NULL, //使用默认进程安全属性
NULL, //使用默认线程安全属性
FALSE,//句柄不继承
NORMAL_PRIORITY_CLASS, //使用正常优先级
NULL, //使用父进程的环境变量
NULL, //指定工作目录
&StartInfo, //子进程主窗口如何显示
&pinfo); //用于存放新进程的返回信息

⑵ c语言如何 调用外部程序

fe函数名: exec...
功 能: 装入并运行其它程序的函数
用 法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);
int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,
char *envp[]);
int execlp(char *pathname, char *arg0, arg1, .., NULL);
int execple(char *pathname, char *arg0, arg1, ..., NULL,
char *envp[]);
int execv(char *pathname, char *argv[]);
int execve(char *pathname, char *argv[], char *envp[]);
int execvp(char *pathname, char *argv[]);
int execvpe(char *pathname, char *argv[], char *envp[]);
程序例: /* execv example */
#include <process.h>
#include <stdio.h>
#include <errno.h> void main(int argc, char *argv[])
{
int i; printf("Command line arguments:\n");
for (i=0; i<argc; i++)
printf("[%2d] : %s\n", i, argv[i]); printf("About to exec child with arg1 arg2 ...\n");
execv("CHILD.EXE", argv); perror("exec error"); exit(1);
}
多看书,多Google,网络

⑶ 从C程序中循环调用一个外部的exe(需要很多参数),怎样节省时间

如果“很多参数”是在运行时要从键盘输入,你可以把参数写入 a.txt

system("prog.exe < a.txt");
程序名 prog.exe
键盘参数文件 a.txt
< -- 转向

如果 有很多程序,很多参数
char prog_name[20][32]; // 程序名 数组
char para_name[20][32]; // 参数文件数组
char my_cmd[80];
int i;

for (i=0;i<20;i++){
....
sprintf(my_cmd,"%s < %s",prog_name[i],para_name[i]);
system(my_cmd);
...

}

⑷ c语言如何 调用外部程序

1. 在调用之前,先声明和定义函数
2. 根据你函数的参数类表来,填入函数调用时所真正用到的参数来进行调用

例如:要在函数 F(){... } 中调用新增的小程序int FA(int a)和 char FC(char c),按照上面讲的:

1.声明和定义

int
FA(int a){ /*函数功能具体的定义*/};

char
FC(char& c){ ... /*函数功能具体的定义*/};

2 根据函数的声明,在F()中加以调用

void
F()
{
... ...
int getA = FA(6); //6为int,如果参数是6.001,则会强制转换成为6
... ...
char getC= FC('a') //a为单个的字符
}

就这样,简单吧,去试试吧 :-)

⑸ 如何在C++调用外部程序时传值

Windows 的话, ShellExecuteEx 可以调用外部程序并附加参数, Linux 不知
另外貌似也可以直接用 System() 直接跑命令行来实现
http://www..com/s?wd=System+C%2B%2B&n=2

阅读全文

与c启动外部程序参数相关的资料

热点内容
proe50有哪几个版本 浏览:776
苹果平板app文件共享 浏览:486
支付宝里文件保存去哪里找 浏览:844
网络电话如何安装 浏览:928
iphone6ifile 浏览:190
linux查找大小超过5k文件 浏览:583
计量机构内审记录包括哪些文件 浏览:959
目前网购app都有哪些 浏览:242
百度地图json数据格式 浏览:101
编程和移动端哪个好学 浏览:563
struts2xml文件 浏览:457
下面哪个不是excel2010的数据类型 浏览:765
如果禁用分页文件或者 浏览:191
雅奇可视化编程怎么样 浏览:831
包含文件名的文本框 浏览:799
spring工具类注入dao 浏览:788
香港买苹果7哪里便宜 浏览:121
win10gt540 浏览:813
什么叫编程简单点 浏览:10
怎么上传word文件到qq 浏览:590

友情链接