进程创建:
1 #include <windows.h>
2 #include <stdio.h>
3
4 int main()
5 {
6
// 创建打开系统自带记事本进程
7
STARTUPINFO si1 = {sizeof(si1)};
8 PROCESS_INFORMATION pi1;
9
char * szCmdLine1 = "notepad";
10
if(::CreateProcess(NULL, szCmdLine1, NULL, NULL, FALSE, NULL, NULL, NULL, &si1, &pi1))
11
printf("Create notepad process successfully!\n");
12
13
14
// 新建一个cmd进程窗口
15
char* szCmdLine2 = "cmd";
16
STARTUPINFO si2 = {sizeof(si2)};
17 PROCESS_INFORMATION pi2;
18
si2.dwFlags = STARTF_USESHOWWINDOW;
// 指定wShowWindow成员有效
19
si2.wShowWindow = TRUE;
// 此成员设为TRUE的话则显示新建进程的主窗口,FALSE不显示
20
21
BOOL bRet = ::CreateProcess(
22
NULL,
// 不在此指定可执行文件的文件名
23
szCmdLine2,
// 命令行参数
24
NULL,
// 默认进程安适性
25
NULL,
// 默认线程安适性
26
FALSE,
// 指定当前进程内的句柄不成以被子进程担任
27
CREATE_NEW_CONSOLE,
// 为新进程创建一个新的控制台窗口,如果为NULL,,不会创建新的窗口
28
NULL,
// 使用本进程的环境变量
29
NULL,
// 使用本进程的驱动器和目录
30
&si1,
31
&pi2);
32
33
if (bRet)
34 {
35
// 既然不使用两个句柄,最好是立刻将它们*
36
::CloseHandle(pi2.hThread);
37
::CloseHandle(pi2.hProcess);
38
printf("新进程的进程ID号:%d\n", pi2.dwProcessId);
39
printf("新进程的主线程ID号:%d\n", pi2.dwThreadId);
40 }
41
42
return 0;
43 }
运行效果:
进程快照
1 #include <windows.h>
2 #include <TLHELP32.H>
// 声明快照函数的头文件
3 #include <stdio.h>
4
5 int main()
6 {
7 PROCESSENTRY32 pe32;
8
pe32.dwSize = sizeof(pe32);
9
10
// 给系统内的所有进程拍一个快照--改函数用于获取系统指定进程的快照,也可以传入差别参数获取被这些进程使用的堆、模块和线程的快照
11
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
12
if (hProcessSnap == INVALID_HANDLE_VALUE)
13 {
14
printf("CreateToolhelp32Snapshot 挪用掉败!\n");
15
return -1;
16 }
17
18
// 遍历进程快照,轮流显示每个进程的信息
19
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
20
while(bMore)
21 {
22
printf("进程名称:%s\n", pe32.szExeFile);
23
printf("进程ID号:%u\n\n", pe32.th32ProcessID);
24
bMore = ::Process32Next(hProcessSnap, &pe32);
25 }
26
27
// 不要忘记断根去snapshot 东西
28 ::CloseHandle(hProcessSnap);
29
return 0;
30 }