C++ 遍历指定进程的线程列表,在 VS2015 测试通过,已添加中文注释。
来源:互联网 发布:和前任做朋友 知乎 编辑:程序博客网 时间:2024/06/06 03:38
原文地址:https://msdn.microsoft.com/zh-cn/library/ms686852(v=vs.85).aspx
#include <windows.h>#include <tlhelp32.h>#include <tchar.h>// 提前声明:BOOL ListProcessThreads(DWORD dwOwnerPID);void printError(TCHAR* msg);int main(void) {ListProcessThreads(GetCurrentProcessId()); // 可使用任务管理器获取某进程的 PID,然后替换 GetCurrentProcessId()return 0;}BOOL ListProcessThreads(DWORD dwOwnerPID) {HANDLE hThreadSnap = INVALID_HANDLE_VALUE;THREADENTRY32 te32;// 把所有进程拍一个快照hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);if (hThreadSnap == INVALID_HANDLE_VALUE)return(FALSE);// 在使用 Thread32First 前初始化 THREADENTRY32 的结构大小.te32.dwSize = sizeof(THREADENTRY32);// 获取第一个线程信息, 如果失败则退出.if (!Thread32First(hThreadSnap, &te32)) {printError(TEXT("Thread32First")); // 打印显示错误 [这里可用 GetLastError() 查看具体错误原因]CloseHandle(hThreadSnap); // 必须在使用后清除快照对象!return(FALSE);}// 现在获取系统线程列表, 并显示与指定进程相关的每个线程的信息do {if (te32.th32OwnerProcessID == dwOwnerPID) {_tprintf(TEXT("\n THREAD ID = 0x%08X"), te32.th32ThreadID);_tprintf(TEXT("\n base priority = %d"), te32.tpBasePri);_tprintf(TEXT("\n delta priority = %d"), te32.tpDeltaPri);}} while (Thread32Next(hThreadSnap, &te32));_tprintf(TEXT("\n"));// 千万不要忘记清除快照对象!CloseHandle(hThreadSnap);return(TRUE);}void printError(TCHAR* msg) {DWORD eNum;TCHAR sysMsg[256];TCHAR* p;eNum = GetLastError();FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL, eNum,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 默认语言sysMsg, 256, NULL); // 行末结尾使用 NULL .p = sysMsg;while ((*p > 31) || (*p == 9))++p;do { *p-- = 0; } while ((p >= sysMsg) &&((*p == '.') || (*p < 33)));// 打印消息_tprintf(TEXT("\n WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg);}
0 0
- C++ 遍历指定进程的线程列表,在 VS2015 测试通过,已添加中文注释。
- 针对PDF文件无法添加注释、附注、书签等功能的解决方法(已测试通过)
- char_dev.c 添加中文注释
- VS2015自动添加注释
- 通过添加系统调用的方式遍历当前进程
- 通过设置进程或线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行
- 通过遍历窗口名判断指定标题的表单是否已打开
- 已解决的问题----------vs 中文注释导致编译不能通过!!!
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- VS2015 自动添加头部注释
- VS2015添加自动头部注释
- 在RFT中如何通过脚本获取已添加到某个脚本中的测试对象?
- class.c 添加中文注释(1)
- class.c 添加中文注释(2)
- JQuery.Ajax之错误调试帮助信息
- qweb report introduction
- Bootstrap 网格系统 介绍
- android_广播的分类
- KVO
- C++ 遍历指定进程的线程列表,在 VS2015 测试通过,已添加中文注释。
- android_广播者_只能用代码注册(动态注册)的广播接收者_监听屏幕的状态
- AndroidMainfest.xml文件中的android属性
- Android随笔之——PackageManager详解
- +++AJAX POST&跨域 解决方案 - CORS+++
- Android之 ListActivity 的使用和在 ListView中添加图片文字
- Android中ListActivity用法实例分析
- navicat 10.1.7的序列号
- 黑客们很喜欢骇客交锋,虽然本片不被影评人认可