VC简单的Tasklist

本文通过C语言展示了如何利用Windows API函数枚举系统中的所有进程。主要使用了CreateToolhelp32Snapshot、Process32First和Process32Next等函数,并通过GetProcAddress获取API地址,实现了对Kernel32.dll库中相关函数的调用。

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

#include <windows.h>
#include <stdio.h>
#include "Tlhelp32.h"
int main()
{
BOOL r;
HANDLE h;
PROCESSENTRY32 pe;
//::ZeroMemory(&pe,sizeof(PROCESSENTRY32));
pe.dwSize=sizeof(PROCESSENTRY32);
h = CreateToolhelp32Snapshot(2,0);
r = Process32First(h, &pe);
while(r) {
  printf("%5d/t%s/n", pe.th32ProcessID,pe.szExeFile);
  r = Process32Next(h, &pe);
}
system("pause");
return 0;
}

#include <windows.h>
#include <stdio.h>
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
DWORD th32MemoryBase;
DWORD th32AccessKey;
} PROCESSENTRY32, *PPROCESSENTRY32;
typedef int (__stdcall *CREATETOOLHELP32SNAPSHOT) (int dw, int pid);
CREATETOOLHELP32SNAPSHOT CreateToolhelp32Snapshot;
typedef int (__stdcall *PROCESS32FIRST) (int h, int lp);
PROCESS32FIRST Process32First;
typedef int (__stdcall *PROCESS32NEXT) (int h, int lp);
PROCESS32NEXT Process32Next;
PROCESSENTRY32 x;
int main()
{
PROCESSENTRY32 pe = {0};
int h, r;
//获取API地址:
HMODULE pk = GetModuleHandleA("kernel32.dll");
CreateToolhelp32Snapshot = (CREATETOOLHELP32SNAPSHOT)GetProcAddress(pk, "CreateToolhelp32Snapshot");
Process32First = (PROCESS32FIRST)GetProcAddress(pk, "Process32First");
Process32Next = (PROCESS32NEXT)GetProcAddress(pk, "Process32Next");
h = CreateToolhelp32Snapshot(2, 0);//创建进程快照
pe.dwSize = sizeof(PROCESSENTRY32);//
r = Process32First(h, (int)&pe);//
while(r) {
printf("%5d/t%s/n", pe.th32ProcessID, pe.szExeFile);
r = Process32Next(h, (int)&pe);
}
return 0;
}

上面是原来的复杂代码
用到的结构,函数原型都自己在代码里声明
用GetProcAddress访问API
对Kernerl32.dll这样的系统库 使用GetProcAddress和使用头文件包含应该是一样的 貌似Kernel32不需要考虑动态加载 卸载的问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值