EnumProcess 实现枚举进程
2024-09-22 09:17:22
BOOL WINAPI EnumProcesses (
_Out_writes_bytes_(cb) DWORD * lpidProcess,
_In_ DWORD cb,
_Out_ LPDWORD lpcbNeeded
); HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance option
DWORD dwProcessId // process identifier
); BOOL WINAPI QueryFullProcessImageNameA(
_In_ HANDLE hProcess,
_In_ DWORD dwFlags,
_Out_writes_to_(*lpdwSize, *lpdwSize) LPSTR lpExeName,
_Inout_ PDWORD lpdwSize
); 函数使用起来都比较方便,参数不说了,需要注意使用EnumProcess要包涵#include <Psapi.h>,以及对应的导入库lib
具体代码示例如下: #include "stdafx.h"
#include <Windows.h>
#include <string>
#include <Psapi.h> #pragma comment (lib, "Psapi.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwProcessID[0x500] = { 0 }; //开始的预先分配较大的缓冲区,用来存放进程ID
DWORD dwNeeded = 0;
BOOL bEnumRes = EnumProcesses(dwProcessID, sizeof(dwProcessID), &dwNeeded);
UINT uCount = dwNeeded / sizeof(DWORD);//获得枚举到进程的数量
for (UINT i = 0; i < uCount; i++)
{ //只对进程进程枚举,所以申请QUERY权限,具体还得根据应用申请权限 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID[i]);
if (NULL !=hProcess)
{
CHAR szProcessName[0x50] = { 0 };
DWORD dwNameLen = 0x50;
BOOL bRet = QueryFullProcessImageNameA(hProcess, 0, szProcessName, &dwNameLen);
if (bRet)
{
printf("ID:%4d\tprocessName(%s)\n", dwProcessID[i], szProcessName);
}
}
}
getchar();
return 0;
}
最新文章
- 项目用到的icarouls类和UIEffectDesignerView类,菜单技巧,构思(金方圆)
- linux tar
- BZOJ2302 [HAOI2011]Problem c
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
- Paxos算法(转)
- hdu 4983 Goffi and GCD(欧拉函数)
- C++STL之String
- SQL Server内存
- DFS中的奇偶剪枝学习笔记
- JAVA中的数据存储空间简述
- 高并发下,log4j日志打印行数导致的内存溢出问题
- Passward
- BZOJ_3083_遥远的国度_树链剖分+线段树
- 在MyEclipse中使用spring-boot+mybatis+freemarker实现基本的增删改查
- Win10 64位连接LJM1005打印机局域网访问
- mysql 5.7 Group Replication
- AutoMapper.Mapper.CreateMap报“System.NullReferenceException: 未将对象引用设置到对象的实例。”异常复现
- 在mac中调试网页
- Android自己定义View之仪表盘
- HTML5 Canvas 小例子 旋转的图片