pe32.th32ProcessID); 24bMore = ::Process32Next(hProcessSnap

时间:2022-03-09 03:07:13

进程创建:
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 }

运行效果:

pe32.th32ProcessID); 24bMore = ::Process32Next(hProcessSnap

进程快照
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 }