原文: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. python之类与对象(3)

    4. 类的初始化函数__init__(): 本章参考:https://blog.csdn.net/hellocsz/article/details/82795514  原作者: hellocsz 总结 ...

  2. Android Studio Gradle下载的包在哪里?

    C:\Users\Administrator\.gradle\caches\modules-2\files-2.1

  3. ActivityManagerService数据结构Activity栈管理(二)

    ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...

  4. 750的设计图以rem为单位的移动设备响应的设置大小

    750的设计图,设置font-size: 125%;  1rem =20px;  大部分浏览器默认的字体大小为16px,谷歌默认字体大小为12px; 其他设备的fon-size的比列: 320/720 ...

  5. java.utils.UUID类介绍

    1 UUID介绍 UUID (Universally Unique Identifier)缩写,即通用唯一识别码,也是被开源软件基金会 (Open Software Foundation, OSF) ...

  6. 【javascript】jq之display:none与visible:hidden

    今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给目标元素附加一个"display: none"属性,那么如果在类似于下面的布局中 ...

  7. C 标准库 - string.h之strstr使用

    strstr Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not p ...

  8. Java入门系列-25-NIO(实现非阻塞网络通信)

    还记得之前介绍NIO时对比传统IO的一大特点吗?就是NIO是非阻塞式的,这篇文章带大家来看一下非阻塞的网络操作. 补充:以数组的形式使用缓冲区 package testnio; import java ...

  9. cut、grep和排序命令

    1.cut 对于行进行操作 cut -d ':' -f 2 以':'为分隔符,切出第二部分的所有行 cut -c 12- 从第12字符往后的字符所有行 2.grep grep '选取的串' 选出所有含 ...

  10. 架构实战项目心得(四)(补):Maven settings.xml的所有标签详解

    文章内容较长,各位看客可以根据自己需要CTRL+F 直接定位到自己需要了解的地方哦~ <?xmlversion="1.0" encoding="UTF-8" ...