windows学习笔记2进程

来源:互联网 发布:python 键盘控制程序 编辑:程序博客网 时间:2024/06/04 19:55

系统在创建新的进程时会为新进程指定一个STARTUPINFO类型的变量这个结构包含了父进程传递给子进程的一些显示信息

       一个进程可以调用GetStartupInfo函数来取得父进程创建自己时使用的STARTUPINFO结构。

函数定义:VOID GetStartupInfo(LPSTARTUPINFO lpStartupInfo);

定义一个STARTUPINFO结构的对象后,总要在使用此对象前将对象的cb成员初始化为STARTUPINFO结构的大小:

STARTUPINFOsi={sizeof(si)};

::GetStartupInfo(&si);

 

typedef struct _STARTUPINFO{

DWORD cb;                       //本结构的长度总是应该被设为sizeof(STARTUPINFO)

LPTSTR lp[微软用户1] Reserved;             //保留(Reserve)字段即程序不适用这个参数

LPTSTR [微软用户2] lpDesktop;              //指定桌面名称

LPTSTR lpTitle;                  //控制台应用程序使用指定控制台窗口标题

DWORD dwX;                    //指定新创窗口的位置坐标(dwX,dwY)和大小信息

DWORD dwY;

DWORD dwXSize;

DWORD dwYSize;

DWORD dwXCountChars;        //控制台程序使用指定控制台窗口的行数

DWORD dwYCountChars;

DWORD dwFillAttribute;         //控制台程序使用指定控制台窗口的背景颜色

DWORD dwFlags;//标志。它的值决定STARTUPINFO结构中哪些成员的值是有效的

WORD wShowWindow;                  //窗口显示方式

WORD cbReserved2;

LPBYTE lpReserved2;

HANDLE hStdInput;                  //控制台程序使用几个标准句柄

HANDLE hStdOutput;

HANDLE hStdError;

} STARTUPINFO,*LPSTARTUPINFO;

 

 

 

 

 

       CreateProcess函数创建一个新的进程和该进程的主进程。新的进程会在父进程的安全上下文中运行指定的可执行文件。

如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数会返回TRUE,否则返回FALSE。

 

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//[out]返回新建进程的标志信息,如ID号、句柄等

);

 

 

举例(打开记事本):

STARTUPINFO si={sizeof(si)};

PROCESS_INFORMATION pi;

char* szCommandLine="notepad";

::CreateProcess(NULL,szCommandLine,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);

 

修改:char*szCommandLine="notepad ReadMe.txt";

 

lpProcessInformation参数是一个指向PROCESS_INFORMATION结构的指针。CtraeteProcess函数会在返回之前初始化此结构的成员。结构定义如下:

 

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess;                      //新建过程句柄

HANDLE hThread;                       //新建进程中主线程的内核句柄

DWORD dwProcessId;                                                 //新建进程的ID

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

}PROCESS_INFORMATION, *LPPROCESS_INFORMATION;

 

       创建一个新进程会促使系统创建一个进程内核对象和一个线程内核对象。在CreateProcess函数返回前,这个函数打开此进程内核对象和线程内核对象的句柄,并将它们的值传给上述结构的hPROCESS和hThread成员。

      


 [微软用户1]Long pointer,说明变量是指针类型

B代表BOOL

Sz代表以0结尾的字符串

 [微软用户2]Const char* 的宏定义

0 0
原创粉丝点击