原文:http://www.cnblogs.com/Apersia/p/6579376.html

在Windows下进程与线程的遍历有好几种方法。

进程与线程的遍历可以使用<TlHelp.h>提供的几个函数来完成。

CreateToolHelp32Snapshot():

作用:为指定的进程,当然还有进程下的堆,模块和线程拍一个快照。

函数原型:

HANDLE WINAPI CreateToolhelp32Snapshot(
_In_ DWORD dwFlags,
_In_ DWORD th32ProcessID
);

参数:

dwFlags:

取决于你想拍什么快照,使用的参数不同,

TH32CS_SNAPPROCESS    进程快照

TH32CS_SNAPTHREAD      线程快照

TH32CS_SNAPMODULE        模块快照

详细的参阅MSDN
 
th32ProcessID: 
快照中包含的进程标识符,获取进程使用0.
Process32First:
作用:获取进程快照的第一个。
原型:
1
2
3
4
BOOL WINAPI Process32First(
    _In_    HANDLE           hSnapshot,
    _Inout_ LPPROCESSENTRY32 lppe
);

参数:

hSnapshot:

有CreateToolhelp32Snapshot创建的快照,
lppe:
LPROCESSENTRY32的指针。
 
Process32Next:
作用:获取进程快照的下一个。
原型:
BOOL WINAPI Process32Next(
_In_ HANDLE hSnapshot,
_Out_ LPPROCESSENTRY32 lppe
);

参数:和Process32First参数相同。

实现代码:

//获取系统进程
#include <windows.h>
#include <TlHelp32.h> #include <iostream>
#include <map>
#include <string>
using namespace std; BOOL traverseProcess(std::map<std::string, int>&_nameID){ PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32); HANDLE hProcessSnap;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE){
cout << "CreateToolhelp32Snapshot Error!" << endl;
return false;
} if(!Process32First(hProcessSnap, &pe32)){
cout << "Process32First Error!" << endl;
CloseHandle(hProcessSnap);
return false;
} int num = 0;
do{
string name = pe32.szExeFile;
int id = pe32.th32ProcessID; cout << "[" << ++num << "]:" << "Process Name = " << name << "------------"
<< "Process ID = " << id << endl; _nameID.insert(std::pair<string, int>(name, id)); }while(Process32Next(hProcessSnap, &pe32)); CloseHandle(hProcessSnap); return true; } int main(){
map<string, int> _nameID; if(!traverseProcess(_nameID)){
cout << "Start Process Error!" << endl;
} system("pause"); }

windows 下进程与线程的遍历的更多相关文章

  1. windows下进程与线程

    windows下进程与线程 Windows是一个单用户多任务的操作系统,同一时间可有多个进程在执行.进程是应用程序的运行实例,可以理解为应用程序的一次动态执行:而线程是CPU调度的单位,是进程的一个执 ...

  2. windows下进程与线程剖析

    进程与线程的解析 进程:一个正在运行的程序的实例,由两部分组成: 1.一个内核对象,操作系统用它来管理进程.内核对象也是系统保存进程统计信息的地方. 2.一个地址空间,其中包含所有可执行文件或DLL模 ...

  3. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  4. windows 下进程池的操作

    在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...

  5. windows下进程间通信与线程间通信

    进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...

  6. [转] linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

  7. Linux下进程与线程的区别及查询方法

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...

  8. 【windows下进程searchfilterhost.exe分析】

    searchfilterhost.exe [进程信息] 进程文件: searchfilterhost.exe 进程名称: n/a 英文描述: searchfilterhost.exe is a pro ...

  9. linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

随机推荐

  1. FreeRTOS-01移植及任务创建和删除

    根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务创建和删除API函数: 工程列表: 1. main.c /**/ #include ...

  2. 论文阅读 | CenterNet:Object Detection with Keypoint Triplets

    相关链接 论文地址:https://arxiv.org/abs/1904.08189 代码链接:https://github.com/Duankaiwen/CenterNet 概述 CenterNet ...

  3. vue中实现国际化--语言切换(转载)

    https://segmentfault.com/a/1190000011800593

  4. mysql 02

    CREATE TABLE emp(eid INT,ename VARCHAR(20),egender CHAR(2),ebirthday DATE,eemail CHAR(10),eramark VA ...

  5. jQuery 学习笔记(TryjQuery)

    第一集.页面加载完成后执行 js 代码: $(document).ready(function(){ $("h1").text("Where to?"); }) ...

  6. React创建组件的三种方式比较

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  7. 没有循环的JavaScript

    有些文章中提到过,缩进(并不能特别准确的)说明了代码的复杂程度.我们想要的是简单的JavaScript.之所以层层缩进,是因为我们用抽象的方式解决问题.但要选用什么抽象方法呢?截止目前,我们没有在特定 ...

  8. unity小地图上的动态图标

    unity制作小地图简单,用rawImage 再来个摄像机就行 但是现在一个需求就是地图上一些东西要加上图标,图标会随着地图物体的移动而移动 然后去网上下载了个小地图插件  UGUI MiniMap( ...

  9. HDU 5700——区间交——————【线段树+枚举】

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  10. css用hover制作下拉菜单

    首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...