详细简单的WIN下创建进程(C语言)
只需要记住一个头文件和一个函数头文件:<windows.h>创建函数:createProcess函数BOOL CreateProcess(//返回值是BOOL型,可以通过这个判断是否创建成功LPCTSTR lpApplicationName,//要创建的进程名称,可执行文件LPTSTR lpCommandLine, //命令行参数这里说明下:在第一个参数和第二个参数里都可以放你的.ex
只需要记住一个头文件和一个函数
头文件:
  <windows.h>
创建函数:
  createProcess函数
BOOL CreateProcess(//返回值是BOOL型,可以通过这个判断是否创建成功
LPCTSTR lpApplicationName, //要创建的进程名称,可执行文件
LPTSTR lpCommandLine, //命令行参数
这里说明下:
在第一个参数和第二个参数里都可以放你的.exe文件的名字,具体做法有以下几种:
文件名字是字符串 可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。
1.文件名字放第一个位置,命令参数写为NULL,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。
2.第一个位置写为NULL,.exe文件名字(注意是字符串,可以先存字符数组里面)直接放在第二个位置,那么这个字符串中的第一个被空格分隔的要素指定可执行模块名。如果文件名不包含扩展名,那么.exe将被假定为默认的扩展名。若文件名中不包含路径,Windows将按照如下顺序寻找这个可执行文件:
	1).当前应用程序的目录。
	2).父进程的目录。
	3).Windows 系统目录
	4).列在PATH环境变量中的目录
3.第一个第二个位置都放了,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。
以下这些参数不用深究,,如果你只是做操作系统作业的话。。哈哈哈。。。
LPSECURITY_ATTRIBUTES // 是否继承进程句柄
LPSECURITY_ATTRIBUTES //是否继承线程句柄
BOOL bInheritHandles //是否继承句柄
DWORD dwCreationFlags //有没有创建标志
LPVOID lpEnvironment // 是否使用父进程环境变量
LPCTSTR lpCurrentDirectory//使用父进程目录作为当前目录,可以自己设置目录
LPSTARTUPINFO lpStartupInfo//STARTUPINFOW结构体详细信息(启动状态相关信息)
LPPROCESS_INFORMATION//PROCESS_INFORMATION结构体进程信息
当然在创建之前要进行准备工作:
  譬如对创建的进程的初始信息结构体的大小的初始化,
  进程句柄的设定。
#include<stdio.h> 
#include <windows.h>
int main() 
{	
	STARTUPINFO si = {sizeof(si)}; //记录结构体有多大,必须要参数
	PROCESS_INFORMATION pi;    //进程id,进程句柄,线程id,线程句柄存在于这个结构体
	char lpPath[] = "test.exe";	//这是用于新进程执行的文件(当前目录下的嗷用的是想对路径)
	CreateProcess(NULL,lpPath,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
	printf("子进程ID:%d\n",pi.dwProcessId); 
	return 0;
}
新创建出来的进程就是原来main进程的子进程。当然需要你先写一个test.cpp然后产生.exe文件,再运行这个程序,你会发现你通过这个程序打开了test.exe文件。
再介绍寻找进程ID的方法:
<windows.h>中
  1.获取当前进程ID函数:
	DWORD PID;
	PID  = GetCurrentProcessId();
	printf("ID:%d\n",PID);
可以用来获取父进程的ID
也可以获取子进程(写在子进程中)
2.直接通过上面代码里面的pi.dwProcessId()来获得
  也就是你创建一个进程的时候的pi可以看作是这个进程的虚拟对象。
更多推荐
 

所有评论(0)