扫描系统的所有进程
1 #include <stdio.h> 2 #include <windows.h> 3 #include <tlhelp32.h> 4 5 int scan() 6 { 7 HANDLE hprocessShap = NULL; 8 PROCESSENTRY32 pe32 = {0}; 9 hprocessShap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); 10 11 if(hprocessShap == INVALID_HANDLE_VALUE) 12 { 13 printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError()); 14 return 1; 15 } 16 17 pe32.dwSize = sizeof(PROCESSENTRY32); 18 19 if(Process32First(hprocessShap, &pe32)) 20 { 21 do 22 { 23 wprintf(pe32.szExeFile); 24 printf("\n"); 25 } 26 while (Process32Next(hprocessShap, &pe32)); 27 } 28 else 29 { 30 printf("\nProcess32First() failed:%d", GetLastError()); 31 } 32 CloseHandle(hprocessShap); 33 return 0; 34 } 35 36 int main(int argc, char *argv) 37 { 38 scan(); 39 return 0; 40 }
获取某进程的PID
有时候在对系统某个进程进行操作时,我们需要获取程序的PID作为参数。其中一个方法当然是在任务管理器的详细信息里寻找,另外一个方法就是通过代码获取到进程的PID直接利用
1 int getpid(wchar_t *name) 2 { 3 HANDLE hprocessShap = NULL; 4 //存放快照进程信息的结构体 5 PROCESSENTRY32 pe32 = {0}; 6 //对系统的进程建立一个快照进行扫描 7 hprocessShap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); 8 if(hprocessShap == INVALID_HANDLE_VALUE) 9 { 10 printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError()); 11 return 1; 12 } 13 //设置结构体的大小 14 pe32.dwSize = sizeof(PROCESSENTRY32); 15 //Process32First获得第一个进程的句柄 16 if(Process32First(hprocessShap, &pe32)) 17 { 18 //匹配输入的进程名 19 do 20 { 21 if(!wcscmp(name, pe32.szExeFile)) 22 { 23 return (int)pe32.th32ProcessID; 24 } 25 } 26 while (Process32Next(hprocessShap, &pe32)); 27 } 28 else 29 { 30 printf("\nProcess32First() failed:%d", GetLastError()); 31 } 32 CloseHandle(hprocessShap); 33 return 0; 34 }