#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <windef.h>
#include <tlhelp32.h>
//创建一个进程快照的线程函数
DWORD WINAPI RD(LPVOID cd){
PROCESSENTRY32 pe32;//声明一个PROCESSENTRY32结构体
pe32.dwSize=sizeof(pe32);//将pe32结构体中dwSize变量赋值
//进程拍照
HANDLE Tcd = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(Tcd == INVALID_HANDLE_VALUE){
printf("进程快照调用失败!!!");
return 1;
}
int i=0;//存储系统当前进程数量
//遍历系统进程
BOOL Tcd_t=::Process32First(Tcd,&pe32);
while(Tcd_t){
printf("进程名称:%s\n",pe32.szExeFile);//显示进程名称
printf("进程ID:%u\n\n",pe32.th32ProcessID);//显示进程ID号
Tcd_t=::Process32Next(Tcd,&pe32);
i++;//进程数量每次自增1
}
::CloseHandle(Tcd);//释放Tcd句柄
printf("当前系统的总进程数%d\n",i);
return 0;
}
//主函数
int main(){
HANDLE handle_RD;//创建一个句柄变量
DWORD dwRD;//创建一个32位无符号变量
//获得RD线程句柄
handle_RD = ::CreateThread(
NULL,
NULL,
RD,
NULL,
0,
&dwRD);
//等待RD线程结束
::WaitForSingleObject(
handle_RD,//需要等待的线程句柄
1000); //等待的时间(毫秒为单位)
printf("进程快照辅助线程结束\n");
::CloseHandle(handle_RD);//释放线程句柄
printf("总进程结束!!\n");
return 0;
}
C用线程实现进程快照
最新推荐文章于 2023-12-15 15:07:50 发布