频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

如何枚举系统当前进程

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组

讨论组http://group.qqread.com

源码下载

  首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:

  HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);

  其中:

  dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;

  th32ProcessID是进程号,为0表示当前进程。

  返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);获取返回的进程

  如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得

  LPPROCESSENTRY32结构的定义如下: typedef struct tagPROCESSENTRY32 {
 DWORD dwSize; //此结构的大小
 DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止
 DWORD th32ProcessID; //进程号
 ULONG_PTR th32DefaultHeapID;
 DWORD th32ModuleID; //此进程引用的模块ID
 DWORD cntThreads; //此进程创建的线程数
 DWORD th32ParentProcessID; //父进程的ID
 LONG pcPriClassBase; //这个进程创建的线程的基本优先权
 DWORD dwFlags; //保留
 TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32;
typedef PROCESSENTRY32 *PPROCESSENTRY32;   
最后不要忘了调用: CloseHandle();   另用函数是: HANDLE OpenProcess(
 DWORD dwDesiredAccess, // access flag
 BOOL bInheritHandle,  // handle inheritance option
 DWORD dwProcessId    // process identifier
);  
用它可打开一个进程,打开进程后,可用: BOOL TerminateProcess(
 HANDLE hProcess, // handle to the process
 UINT uExitCode  // exit code for the process
);   
来关闭进程。

  笔者用上述函数做了一个类似任务管理器进程管理器可以枚举所有进程、关闭进程。细节请参见源代码。

更多文章 更多内容请看系统优化大全系统安全设置系统安装手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章