您的位置:首页 > 编程语言 > C语言/C++

VC++ 创建进程

2010-10-14 16:55 267 查看
创建进程的函数为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 // 创建后用于被创建子进程的信息
);
lpApplicationName:为执行程序的文件名,如果在创建进程时要使用参数,则该参数可以为NULL。

lpCommandLine:为参数行,如果无参数可以为NULL,在有参数传递给进程时如下设置:lpApplicationName=NULL;lpCommandLine=para,例如lpCommandLine="c://windows//notepad.exe c://autoexec.bat"。

lpProcessAttributes,lpThreadAttributes:分别描述了创建的进程和线程安全属性,如果使用NULL表示使用默认的安全描述。

bInheritHandles:表示当前进程中的打开的句柄是否能够被创建的子进程所继承。

dwCreationFlags:表示创建标记,通过该标记可以设置进程的创建状态和优先级别。常用的有下面的标记:

CREATE_NEW_CONSOLE:为子进程创建一个新的控制台。
CREATE_SUSPENDED:子进程在创建时为挂起状态。
HIGH_PRIORITY_CLASS/NORMAL_PRIORITY_CLASS:高/普通优先级别。
lpEnvironment:表示子进程所使用的环境变量,如果为NULL,则表示与当前进程使用相同的环境变量。

lpCurrentDirectory:表示子进程运行的初始目录。

lpStartupInfo:用于在创建子进程时设置各种属性。该结构定义如下:

typedef struct _STARTUPINFO { // si
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;

如果要使结构中相关的分量起作用,必须正确的设置dwFlags。例如:dwFlags包含STARTF_USESIZE表示dwXSize和dwYSize有效,包含STARTF_USEPOSITION表示dwX和dwY有效。

lpProcessInformation:用来在进程创建后接收相关信息,该结构由系统填写。

typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess; //进程句柄
HANDLE hThread; //进程的主线程句柄
DWORD dwProcessId; //进程ID
DWORD dwThreadId; //进程的主线程ID
} PROCESS_INFORMATION;
关于ShellExecute函数的中文说明

ShellExecute 函数打开或打印一个指定的文件。文件可以是可执行文件也可以是一个文档。请查看关于ShellExecuteEx的帮助。
HINSTANCE ShellExecute(
HWND hwnd, // 主窗口句柄
LPCTSTR lpOperation, // 字符串指针,指定要执行的操作
LPCTSTR lpFile, // 字符串指针,指定文件名或目录名
LPCTSTR lpParameters, // 字符串指针,指定传给可执行文件的参数  
LPCTSTR lpDirectory, // 字符串指针,指定缺省目录
INT nShowCmd // 文件显示模式
);
参数
hwnd
指定一个主窗体。

lpOperation
一个非空的字符串指针,指定操作方式。有以下操作方式可用
"open"
该函数打开由lpFile指定的文件,文件可以是一个可执行文件,也可以是文档文件,也可以是一个要打开的目录。
"print"
该函数打印由lpFile指定的文件。文件应该是一个文档文件。如果是一个可执行文件则运行这个文件就象指定用"opne"操作方式一样。
"explore"
函数打开浏览由lpFile指定的目录窗口。
如果该参数为NULL,则相当于使用"open"操作方式。

lpFile
一个非空字符串指定要打开或打印的文件,或者是要打开浏览的目录名。该函数可以打开一个可执行文件或一个文档文件,也可以打印一个文件。

lpParameters
如果lpFile指定一个可执行文件,则lpParameters 是一个指向非空字符串的指针,代表要传给这个应用程序的参数。
如果lpFile指定一个文档文件,则其应该为空。

lpDirectory
非空字符串指定缺省目录

nShowCmd
如果lpFile指定一个可执行文件,nShowCmd指定应用程序运行时如何显示。可以是下列的值:

值    意义
SW_HIDE 隐藏窗体,激活另一个窗口。
SW_MAXIMIZE 最大化显示
SW_MINIMIZE 最小化显示
SW_RESTORE 正常状态显示
SW_SHOW 激活并以其当前位置尺寸显示
SW_SHOWDEFAULT 以线程创建时传进的参数进行显示
SW_SHOWMAXIMIZED 激活并最大化显示
SW_SHOWMINIMIZED 激活但以最小化方式显示
SW_SHOWMINNOACTIVE 最小化显示,原来焦点窗体不变active.
SW_SHOWNA 以其当前状态显示
SW_SHOWNOACTIVATE
SW_SHOWNORMAL 以正常方式显示。
如果lpFile指定的是文档文件,则nShowCmd应该为0。

返回值
如果成功,返回当前运行应用程序句柄或DDE服务器句柄
如果失败,返回值小于等32,代表下面的意义。

值   意义
0 操作系统内存或资源不够
ERROR_FILE_NOT_FOUND 文件没找到
ERROR_PATH_NOT_FOUND 指定路径不对
ERROR_BAD_FORMAT 不是合法的应用程序
SE_ERR_ACCESSDENIED 操作系统拒绝访问此文件
SE_ERR_ASSOCINCOMPLETE 文件名关联不完整或非法
SE_ERR_DDEBUSY 不能完成DDE事务,因为正在处理其它DDE事务  
SE_ERR_DDEFAIL DDE事务失败
SE_ERR_DDETIMEOUT 请示超时
SE_ERR_DLLNOTFOUND 没找到指定的动态链接库
SE_ERR_FNF 指定文件没找到。
SE_ERR_NOASSOC 没有与当前文件类型关联的应用程序
SE_ERR_OOM 内存不足
SE_ERR_PNF 路径没找到
SE_ERR_SHARE 共享错误

备注
由参数lpFile指定的文件可以是文档文件或是可执行文件。如果是文档文件则可以打开或打印文件,由lpOperation参数指定。如果是可执行文件则只能打开,即使lpOperation指定为"print".
You can use ShellExecute to open or explore a shell folder. To open a folder, use either of the following calls:
可以使用该函数打开或浏览一个文件夹:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);

ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);

浏览文件夹:
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
如果 lpOperation 为 NULL,函数打开这个文件如果为"open" 或 "explore",则函数会打开一个窗口
打开一个网叶:
ShellExecute(NULL,"open","http://www.sina.com.cn",NULL,NULL,SW_SHOW);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: