Windows API编程----枚举系统进程

时间:2022-09-04 08:25:56
1.该函数可以检索系统中的每个进程的标识符(进程ID)

BOOL WINAPI EnumProcesses(
  _Out_ DWORD *pProcessIds,
_In_  DWORD cb,
_Out_ DWORD *pBytesReturned
);

cb为pProcessIds指向的内存空间的字节数,(*pBytesReturned)/sizeof(DWORD)即为pProcessIds中返回的进程ID的个数。

2.检索制定进程中的每个模块的句柄

BOOL WINAPI EnumProcessModules(
_In_ HANDLE hProcess,
_Out_ HMODULE *lphModule,
_In_ DWORD cb,
_Out_ LPDWORD lpcbNeeded
);

hProcess:  进程句柄

lphModule: 接收module句柄的数组

cb: lphModule数组的字节数

lpcbNeeded: 在lphModule 数组中存储所有module句柄所需的字节数(可以先将lphModule设置为NULL,cb设置为0,来调用该函数,然后用lpcbNeeded中存储的字节数来分配lphModule的空间,然后再重新调用EnumProcessModules)

3.检索制定的Module的 base name

DWORD WINAPI GetModuleBaseName(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpBaseName,
_In_ DWORD nSize
);

hProcess: 包含 Module 的进程的句柄

hModule: 要检索的Module的句柄;如果该参数为NULL,该函数返回调用该函数的进程的名字

lpBaseName: 用来接收Module名字的buffer;buffer空间不够的话,base name就被截断

nSize:lpBaseName buffer的空间大小

返回值:调用成功,则返回copy到lpBaseName中的字符串的长度;调用失败,则返回0

示例程序:

#include<iostream>
#include<Windows.h>
#include<Psapi.h>
using namespace std; void PrintProcessNameAndID(DWORD processID); int main(int argc, char* argv[])
{
//获得进程标识符列表
DWORD aProcesses[], cbNeeded, cProcesses;
unsigned int i;
if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return ;
//计算返回进程标识符的个数
cProcesses = cbNeeded / sizeof(DWORD);
for (i = ; i < cProcesses; i++)
{
PrintProcessNameAndID(aProcesses[i]);
}
system("pause");
return ;
} void PrintProcessNameAndID(DWORD processID)
{
char szProcessName[MAX_PATH] = "unknown";
//得到进程句柄
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); if (NULL != hProcess)
{
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName));
}
else return;
}
else
return;
printf("%s (Process ID:%u)\n", szProcessName, processID);
CloseHandle(hProcess);
}

Windows API编程----枚举系统进程的更多相关文章

  1. 浅谈Windows API编程

    WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程 ...

  2. Windows API 编程入门

    Windows 工作原理的中心思想就是“动态链接”概念.Windows 自身带有一大套函数,应用程序就是通过调用这些函数 来实现它的用户界面和在屏幕上显示文本和图形的.这些函数都是在动态链接库里实现的 ...

  3. Windows API编程(SDK编程)配置VS2017——出现LNK 2019错误的win32项目如何解决

    最近刚入门SDK编程,在 我终于知道为什么windowsApi学的人这么少了 这篇文章中,确实发现了这样的问题,我的教程使用VS2013->Windows桌面->win32,就诞生了能使用 ...

  4. Windows API 编程----EnumWindows&lpar;&rpar;函数的用法

    1. 函数原型: BOOL WINAPI EnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam); lpEnumFunc: 应用程序 ...

  5. Windows API 编程----将错误代码转换成错误描述信息

    Windows编程有时会因为调用函数而产生错误,调用GetLastError()函数可以得到错误代码.如果错误代码为0,说明没有错误:如果错误代码不为0,则说明存在错误. 而错误代码不方便编程人员或用 ...

  6. Windows API编程(一)完整的示范程序

    ## #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数; int APIEN ...

  7. Windows API 编程-----DLL编程之禁止加载自己

    和可执行文件一样,动态链接库也有自己的入口地址,如果系统或者当前进程的某个线程调用LoadLibrary函数加载或者使用FreeLibrary卸载该动态链接库的时候,会自动使用3个特定的堆栈参数跳转到 ...

  8. Windows API 编程-----Windows NT 环境下禁止任务切换

    函数原型: BOOL WINAPI SystemParametersInfo( _In_ UINT uiAction, _In_ UINT uiParam, _Inout_ PVOID pvParam ...

  9. 用Windows API函数(CreateFile&sol;ReadFile&sol;WriteFile&sol;CloseHandle)完成文件拷贝程序&lpar;初级版&rpar;

    文件拷贝程序 程序类型:Console 参数:源文件名   目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...

随机推荐

  1. Tornado 结合memcached缓存页面

    原因 Blog是一个更新并不很频繁的一套系统,但是每次刷新页面都要更新数据库反而很浪费资源,添加静态页面生成是一个解决办法,同时缓存是一个更好的主意,可以结合Memcached添加少量的代码进行缓存, ...

  2. JAVA学习篇--JAVA两种编程模式控制

    在Drp项目中,解说了两种编程模式Model 1和Model2.以下是对这两种模式的简单理解.以及因为Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对照学习一下. ...

  3. Android第一次打开应用程序,实现向导界面

    转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42079167 先说下思路:1.利用Preference存储数据,来记录是否是 ...

  4. Jmeter应用-接口测试

    1.BS架构应用性能 2.HTTP协议接口功能与性能 3.FTP协议接口功能与性能 4.Mysql数据库性能 5.MongoDB数据库性能 6.支持自定义Java组件开发 测试计划-右键-添加线程组 ...

  5. mybatis配置文件详解

    这是我看到的博文中最全的一篇了 参见:https://www.cnblogs.com/black-spike/p/7765732.html

  6. FTP登录提示Can&&num;39&semi;t open data connection for transfer of &quot&semi;&sol;&quot&semi;

    服务器: 系统:windows server 2008 R2 standard 是否开启防火墙:是 FTP客户端:Filezilla server 本地: FTP服务端:winscp 使用winscp ...

  7. 在DOS中操作MySQL数据库出现中文乱码

    1. 问题:最近使用到MySQL数据库操作,在DOS下使用命令行向mysql中插入/读取中文时出现乱码问题. 2. 原因:由于CMD客户端默认编码为GBK,而本人在安装MySQL时设置编码为UTF-8 ...

  8. 3&period;1-uC&sol;OS-III的特点:

    1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制. 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理.同步.内部任务交流等. uC/OS- ...

  9. CG图形学的工具

    1. http://give.zju.edu.cn/cgcourse/new/frame/index.html 网页CG学习

  10. 002——数组(二)each&lpar;&rpar; list&lpar;&rpar; implode&lpar;&rpar; explode&lpar;&rpar; in&lowbar;array&lpar;&rpar;

    <?php /** * 数组(二)each() list() implode() explode() in_array() */ /*implode() 把数组拆分成字符串 * explode( ...