在Windows Mobile和Wince(Windows Embedded CE)下进行Win32开发,取出当前所有运行中进程信息的方法

简介:

寇平 同学问我使用Native C++开发时如何在取出进程下窗口的句柄,因为取进程下窗口句柄需要用到进程信息,我先总结出如何取出当前所有运行进程信息的方法。

1.引用Tlhelp32.h文件

#include "Tlhelp32.h"

因为需要用到CreateToolhelp32Snapshot,Process32First和Process32Next来查询进程信息。

 

2.轮询进程信息

void GetRunningProcesses()
{
processes.clear();
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

//Do a little error handling, just in case.
if(hSnapShot == (HANDLE)-1)
{
wprintf(TEXT("GetRunningProcesses: Failed CreateToolhelp32Snapshot Error: %d\n"),
GetLastError());
return;
}

PROCESSENTRY32 process;
process.dwSize = sizeof(PROCESSENTRY32);
BOOL retval = Process32First(hSnapShot, &process);
while(retval)
{
processes.push_back(process);
retval = Process32Next(hSnapShot, &process);
}

//Always good to close those handles. Then return the number of processes that we found.
CloseToolhelp32Snapshot (hSnapShot);
}

这是本文的重点,我把查询到的进行信息放到一个全局的list里面去了,可能封装为对象。

#include <list>

std::list<PROCESSENTRY32> processes;

3.显示进程信息

void ShowRunningProcesses()
{
GetRunningProcesses();
DWORD maxProcessNameLength = GetMaxProcessNameLength();
// Output a header to describe each column
wprintf(TEXT("%-*s %8s %13s %9s %9s %10s\n"),
maxProcessNameLength,
TEXT("Process"),
TEXT("PID"),
TEXT("Base Priority"),
TEXT("# Threads"),
TEXT("Base Addr"),
TEXT("Access Key")
);

// Output information for each running process
for( std::list<PROCESSENTRY32>::iterator it=processes.begin();
it!=processes.end(); ++it)
{
wprintf(TEXT("%-*s %8X %13d %9d %9X %10X\n"),
maxProcessNameLength,
it->szExeFile,
it->th32ProcessID,
it->pcPriClassBase,
it->cntThreads,
it->th32MemoryBase,
it->th32AccessKey
);
}
}

DWORD GetMaxProcessNameLength()
{
DWORD maxLength = 0;
DWORD currentLength;
for( std::list<PROCESSENTRY32>::iterator it=processes.begin();
it!=processes.end(); ++it)
{
currentLength = wcslen( it->szExeFile );
if( maxLength < currentLength )
{
maxLength = currentLength;
}
}
return maxLength;
}

把进程信息打印到控制台去,由于Windows Mobile没有控制台,显示方法会不一样,但是都是从list(processes)中读出来显示。

 

4.链接toolhelp.lib

Windows-Embedded-CE-HWnd-1

 

完成了,运行效果如下:

Windows-Embedded-CE-HWnd-2

 

上面的代码参考了http://geekswithblogs.net/BruceEitman/archive/2008/05/14/windows-ce--using-toolhelpapi-to-list-running-processes.aspx

 

之前我也写过一篇在.NET Compact Framework下如何管理进程的文章,可以参考

在Windows Mobile和Wince(Windows Embedded CE)下如何使用.NET Compact Framework开发进程管理程序

 

下一篇讲述 在Windows Mobile和Wince(Windows Embedded CE)下进行Win32开发,取出窗口句柄的方法



    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/11/19/Windows-Mobile-Native-Process.html,如需转载请自行联系原作者



相关文章
|
Linux
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
180 0
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
824 1
|
存储 监控
【Azure Cloud Service】在Azure云服务中收集CPU监控指标和IIS进程的DUMP方法
在使用Cloud Service服务时,发现服务的CPU占用很高,在业务请求并不大的情况下,需要直到到底是什么进程占用了大量的CPU资源,已经如何获取IIS进程(w3wp.exe)的DUMP文件?
156 8
|
编译器
【收藏】内核级利用通用Hook函数方法检测进程
【收藏】内核级利用通用Hook函数方法检测进程
|
数据安全/隐私保护 异构计算 Windows
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
214 0
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
194 0
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
机器学习/深度学习 数据可视化 搜索推荐
低代码开发是一种能够加速软件研发进程的高效开发方法
【8月更文挑战第4天】低代码开发是一种能够加速软件研发进程的高效开发方法
168 0
|
Linux Windows
Centos和Windows进程相关命令
Centos 杀死同名的全部进程命令:ps -efww|grep 进程名 |grep -v grep|cut -c 9-15|xargs kill -9 Centos 查看同名的全部进程数命令:ps -ef | grep 进程名 | wc -l Windows杀死同名进程命令:taskkill /F /IM chrome.exe Windows查看同名进程命令:tasklist /fi "...
179 0
|
Windows
Windows下杀进程的命令
Windows下杀进程的命令
132 0

热门文章

最新文章