MFC下启动进程的方法

1.Winexec

这个函数最简单,只有两个参数,原型如下:

UINT WinExec(

LPCSTR lpCmdLine, // address of command line

UINT uCmdShow     // window style for new application

);

使用方法如下:

WinExec(_T("D:\\Program Files\\zeecalls\\zeecalls.exe"), SW_SHOWMAXIMIZED);

表示以最大化的方式打开zeecalls.exe, 需要注意的是, 在VC中, ‘\’是一个转义字符, 需要以‘\\’来。

2.CreateProcess

上面的几种方式都实现了我们在自己的应用程序中打开其他的应用程序的目的,

但是,我们没有得到足够多的关于新进程的信息,也没有使用过多的手段去控制新的进程的细节属性,

所以,如果要达到这些目的,我们就需要使用CreateProcess函数了,

首先看看这个函数的原型:

BOOL CreateProcess(

LPCTSTR lpApplicationName,           //执行程序名

LPTSTR lpCommandLine,               //参数行

LPSECURITY_ATTRIBUTES lpProcessAttributes, //所创建进程的安全属性, NULL则使用默认属性

LPSECURITY_ATTRIBUTES lpThreadAttributes, //所创建线程的安全属性, NULL则使用默认属性

BOOL bInheritHandles,                   //继承标志

DWORD dwCreationFlags,                 //创建标志

LPVOID lpEnvironment,                     //环境变量

LPCTSTR lpCurrentDirectory,           //运行该进程的初始目录

LPSTARTUPINFO lpStartupInfo,           //用于在创建子进程时设置各种属性

LPPROCESS_INFORMATION lpProcessInformation //用于在进程创建后接受相关信息

);

在上面的参数中,使用了两个比较重要的数据结构:STARTUPINFO和PROCESS_INFORMATION。这两个结构的定义分别如下:

typedef struct _STARTUPINFO {

DWORD cb;                   //结构长度

LPTSTR lpReserved;          //保留

LPTSTR lpDesktop;           //保留

LPTSTR lpTitle;             //如果为控制台进程则为显示的标题

DWORD dwX;                  //窗口横坐标

DWORD dwY;                  //窗口丛坐标

DWORD dwXSize;              //窗口宽度

DWORD dwYSize;              //窗口高度

DWORD dwXCountChars;        //控制台窗口字符号宽度

DWORD dwYCountChars;        //控制台窗口字符号高度

DWORD dwFillAttribute;      //控制台窗口填充模式

DWORD dwFlags;              //创建标记

WORD wShowWindow;           //窗口显示标记,如同ShowWindow中的标记

WORD cbReserved2;           //保留参数

LPBYTE lpReserved2;         //保留参数

HANDLE hStdInput;           //标准输入句柄

HANDLE hStdOutput;          //标准输出句柄

HANDLE hStdError;           //标准错误句柄

} STARTUPINFO, *LPSTARTUPINFO;

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess;            //进程句柄

HANDLE hThread;             //进程的主线程句柄

DWORD dwProcessId;          //进程的ID

DWORD dwThreadId;           //进程的主线程ID

} PROCESS_INFORMATION;

作为例子,我们来看看如何使用CreateProcess来打开相同的文件:

STARTUPINFO si;

memset(&si, 0, sizeof(si));

si.cb=sizeof(si);

si.wShowWindow = SW_SHOW;

si.dwFlags = STARTF_USESHOWWINDOW;

PROCESS_INFORMATION pi;

memset(&pi, 0, sizeof(pi));

bool fRet=CreateProcess(

"D:\\Program Files\\zeecalls\\zeecalls.exe"

,NULL

,NULL

,FALSE

,NULL

,0

,NULL

,NULL

,&si

,&pi

);

3.ShellExecute

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

ShellExecute(

HWND hWnd,            //父窗口句柄

LPCSTR lpOperation,   //操作类型

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

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

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

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

)

首先要包含头文件shellapi.h

例子如下:

//调用计算器

ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);

//调用记事本

ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);

//打开超链接

ShellExecute(hWnd,"open","http://hexun.com/kenshin2008",NULL,NULL,SW_SHOW);

//打开路径文件 PathName(文件路径)

ShellExecute(NULL,"open",PathName,NULL,NULL,SW_SHOWNORMAL);

●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。

●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。

●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。

●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。

●Directory:用于指定默认目录。

●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。

若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。

上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。

最后的那个参数 nShowCmd ,为窗口指定可视性方面的一个参数。

请用下述任何一个常数

SW_HIDE 隐藏窗口,激活另一窗口

SW_MINIMIZE 最小化窗口,激活另一窗口

SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态

SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态

SW_SHOWMAXIMIZED 最大化窗口,并将其激活

SW_SHOWMINIMIZED 最小化窗口,并将其激活

SW_SHOWMINNOACTIVE 最小化一个窗口,但不改变活动窗口

SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口

SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口

SW_SHOWNORMAL 与SW_RESTORE相同

可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,以上几种方法可能有些会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!

时间: 2024-10-12 05:03:46

MFC下启动进程的方法的相关文章

Linux(Cent OS7.2)下启动停止memcached方法及ps命令使用讲解

Linux下,以Cent OS7.2为例,安装memcached后的启动方法很简单,这里我们使用yum源安装. 首先查找yum源版本库的memchaced安装包, yum list | grep memcached 上述linux命令会返回报名,如memcached.x86_64,然后执行 yum install memcached.x86_64 memcached -u root -m 1024m -d start 其中,yum install是安装memcached包命令,后面的是memca

windows命令行下杀死进程的方法

tskill 12882 tskill chrome xp和win7下有两个好东东tasklist和tskill.tasklist能列出所有的进程,和相应的信息.tskill能查杀进程,语法很简单:tskill程序名!或者是tskill 进程id 例如:tskill 12882 原文地址:https://www.cnblogs.com/du-jun/p/12186454.html

win8 64下启动Apache失败:443端口被占用的解决方法

今天帮朋友弄一个Apache的环境,遇到了The requested operation has failed的错误. 使用命令行启动之后报如下错误: D:\Apache24\bin>httpd -k start(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次. : AH00072: make_sock: could not bind to address [::]:443(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次. : AH0007

Centos6 下启动httpd报错 Could not reliably determine the server's解决方法

在启动httpd的时候报错: 修改/etc/httpd/conf/httpd.conf 配置,去掉ServerName 前的#(或者手动添加ServerName localhost:80)然后重启httpd服务: Centos6 下启动httpd报错 Could not reliably determine the server's解决方法

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

【转】linux下杀死进程(kill)的N种方法

转载一篇,最原始的出处已不可考,望见谅! 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef --smx       1822     1  0 11:38 ?        00:00:49 gnome-terminalsmx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helpersmx       1824  1822  0 11:38 pts/0    00:00:02 bashsmx       1827    

linux下杀死进程(kill)的N种方法

常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helper smx       1824  1822  0 11:38 pts/0    00:00:02 bash smx       1827     1  4 11:38 ?    

Linux下强制杀死进程的方法

常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helper smx 1824 1822 0 11:38 pts/0 00:00:02 bash smx 1827 1 4 11:38 ? 00:26:28 /usr/lib/firefox-3.6.18/firefox-bin smx 1857 1822

PHP环境下Memcache的使用方法

原文:PHP环境下Memcache的使用方法 原文地址:http://www.2cto.com/kf/201503/384967.html 如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作:作为PHP开发人员,我们一般能想到的方法有页面静态化处理.防盗链.CDN内容分发加速访问.mysql数据库优化建立索引.架设apache服务器集群().还有就是现在流行的各种分布式缓存技术:如memcached/redis: 1.什么是Memcached? a.