VC 显示当前运行的所有进程

本文介绍了两种使用VC来获取当前运行的所有进程的方法:一是利用CreateToolhelp32Snapshot创建进程快照并遍历;二是使用EnumProcesses获取所有进程ID,再根据ID获取详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC中来获得显示当前运行的所有进程的方法有很多,下面介绍两种方法。

1、通过CreateToolhelp32Snapshot来创建所有进程的快照,然后获取所有进程的信息。

代码实现如下,可在VC6.0下运行。

#include <windows.h>
#include
<tlhelp32.h>
#include
<stdio.h>
#include
<iostream.h>
#include
<Winbase.h>

BOOL PrintProcessList( )
{
/*得到所有进程的快照*/
HANDLE hProcessSnap
= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(INVALID_HANDLE_VALUE == hProcessSnap)
{
cout
<<"创建进程快照失败!"<<endl;
return FALSE;
}

/*保存进程信息的结构体*/
PROCESSENTRY32 ProEntry32;
memset(
&ProEntry32, 0, sizeof(ProEntry32));
ProEntry32.dwSize
= sizeof(ProEntry32);

/*得到第一个进程的信息*/
if(!Process32First(hProcessSnap, &ProEntry32))
{
cout
<<"获取进程信息失败!"<<endl;
CloseHandle(hProcessSnap);
return FALSE;
}

/*显示所有的进程的相关信息*/
do
{
/*显示进程名称*/
cout
<<ProEntry32.szExeFile<<endl;

}
while(Process32Next(hProcessSnap, &ProEntry32));

CloseHandle( hProcessSnap );
return TRUE;
}

void main( )
{
PrintProcessList();
}

2、通过EnumProcesses来获得所有进程的ID,然后根据ID获取进程的信息。

代码实现如下,由于VC6.0中没有EnumProcesses函数,因此只能在VS2003以上版本中运行。

#include "stdafx.h"
#include
<windows.h>
#include
<stdio.h>
#include
<tchar.h>
#include
"psapi.h"

BOOL PrintEnumProcess()
{
DWORD arrProIds[
1024], ByteCnt, ProCnt;

/*获得所有的进程的ID*/
if (!EnumProcesses(arrProIds, sizeof(arrProIds), &ByteCnt))
{
_tprintf( TEXT(
"获取所有进程的ID失败!\n"));
return FALSE;
}

/*计算获得的进程ID的数量*/
ProCnt
= ByteCnt / sizeof(DWORD);

/*输出所有进程的名称*/
for (unsigned int i = 0; i < ProCnt; i++)
{
if( arrProIds[i] != 0 )
{
TCHAR szProcessName[MAX_PATH]
= TEXT("<unknown>");

HANDLE hProcess
= OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, arrProIds[i]);

/*得到进程的名称*/
if (NULL != hProcess )
{
HMODULE hMod;
DWORD ByteCnt;

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&ByteCnt) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}

_tprintf( TEXT(
"%s\n"), szProcessName);

CloseHandle( hProcess );
}
}

return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
PrintEnumProcess();

system(
"pause");

return 0;
}

转载于:https://www.cnblogs.com/xianyunhe/archive/2011/06/09/2076878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值