Window API 第五篇 WTSEnumerateProcesses
这个函数可用来枚举系统进程,先来看定义:
BOOL WTSEnumerateProcesses(
_In_ HANDLE hServer,
_In_ DWORD Reserved,
_In_ DWORD Version,
_Out_ PWTS_PROCESS_INFO *ppProcessInfo,
_Out_ DWORD *pCount
);
参数说明:
hServer: 终端服务器的句柄,可以是调用WTSOpenServer()的返回值,或者用宏WTS_CURRENT_SERVER_HANDLE 来指定你的程序正在运行的终端服务器。到时候此参数可以为NULL,或者WTS_CURRENT_SERVER_HANDLE或者在控制台下输入nbtstat -n命令查看本地NetBIOS名称,
进一步调用WTSOpenServer(LPTSTR pServerName)函数,即可得到hServer的句柄。
这里有几个宏需要注意:
#define WTS_CURRENT_SERVER ((HANDLE)NULL)
#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
#define WTS_CURRENT_SERVER_NAME (NULL)
Reserved:保留参数,必须为0
Version:指定枚举请求的版本,必须为1
ppProcessInfo:输出参数,指向PWTS_PROCESS_INFO结构的指针, WTS_PROCESS_INFO 结构里存有进程的信息,包括name和ID
pCount:输出参数,返回枚举到的个数,即PWTS_PROCESS_INFO的数量。 返回值:成功返回非零,失败返回0。
说明:需要引入头文件:#include <WtsApi32.h> 还要导入静态库 #pragma comment (lib, "Wtsapi32.lib")
需要注意,如果调用了WTSOpenServer()函数,最后要调用WTSCloseServer()函数释放资源。但不论何时都别忘了调用WTSFreeMemory()函数释放PWTS_PROCESS_INFO指针资源。
下面举一个简单的例子
void main()
{
PWTS_PROCESS_INFO ppi;
DWORD dwCounts;
BOOL bRet = WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &ppi, &dwCounts);
if (!bRet)
return ;
//这里先把ppi存起来,方便以后释放,当然如果用数组下标的形式访问的话就不用这样繁琐了
PWTS_PROCESS_INFO ppiTemp = ppi;
for (int i = 0; i< dwCounts; i ++)
{
printf("%s \t %d \n", ppi->pProcessName, ppi->ProcessId);//ppi[i].pProcessName
ppi ++;
}
//内存泄漏就是从这里来的,好多人要忘记这里
WTSFreeMemory(ppiTemp);
getchar();
}
Window API 第五篇 WTSEnumerateProcesses的更多相关文章
- 【HANA系列】【第五篇】SAP HANA XS的JavaScript API详解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第五篇]SAP HANA XS ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 【Python五篇慢慢弹】数据结构看python
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- ElasticSearch查询 第五篇:布尔查询
布尔查询是最常用的组合查询,不仅将多个查询条件组合在一起,并且将查询的结果和结果的评分组合在一起.当查询条件是多个表达式的组合时,布尔查询非常有用,实际上,布尔查询把多个子查询组合(combine)成 ...
- EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由
目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...
- 第五篇Scrum冲刺博客--Interesting-Corps
第五篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 音乐详情页面跳转.设计及布局实现设计 搜索页面以及音乐详情页面数据导入及测试 叶学涛 编写分 ...
- 【Python五篇慢慢弹(3)】函数修行知python
函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
随机推荐
- JAVA算法之递归
Ⅰ.三角数字 首先我们来看一组数字:1,3,6,10,15,21.....,在这个数列中第n项是由n-1项加n得到的,这个序列中的数字称为三角数字因为他们可以形象化地表示成一个三角形排列.如下图 通过 ...
- js数学公式-曲线运动
---勾股定理 a*a + b*b =c*c ---三角函数 正弦 : sin 余弦 : cos 正切 : tan 余切 : cot 正弦定理 a/sinA = b/sinB =c/sinC = 2r ...
- log4j2 按日期分割,自动清理历史文件
方式一:定义CronTriggeringPolicy <?xml version="1.0" encoding="UTF-8"?> <Conf ...
- PSCC2019常用基础操作
一.常用设置 1.界面设置(快捷键Ctrl+K):可以对PS界面的颜色.导出格式.性能等等进行设置(这里暂存盘建议设置D盘或F盘,默认C盘). 2.常用面板整理(菜单栏->窗口) 二.常用快捷键 ...
- Docker系列(四):Docker容器互联
基于Volume的互联 为什么需要Volume docker文件系统是分层的,下面的是全部是只读的,最上面的是可写层,容器中的进程如果修改了某个文件,比如修改了下层的某个文件,其实是在最顶层复制下层文 ...
- 实验室系统tomcat 6 java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- /bin /usr/bin /sbin /usr/sbin 目录的作用
/bin是系统的一些指令.bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.chmod df.dmesg.gzip.kill.ls.mkdir.more.mount.rm.su ...
- http及浏览器相关知识点归纳
http是应用层协议,采用请求/响应模型 1.浏览器地址栏输入URL地址后发生了什么? 浏览器判断地址是否是合理的URL地址,是否是http协议请求,如果是则进入下一步 浏览器对此URL进行缓存检查: ...
- [JZOJ5233] 【GDOI模拟8.5】概率博弈
题目 题目大意 给你一棵树,这棵树上的所有叶子节点的权值是随机的排列. 两个人博弈,从根开始,轮流往下走. 先手希望权值最大,后手希望权值最小. 问期望的最终结果. 思考历程 这场比赛实在是太丧心病狂 ...