关于windows进程问题

caoying1977 2005-03-26 09:22:25
各位兄弟姐妹,有没有API可以得到windows正在运行的进程信息啊,要支持w2000,wxp,wme,w2003的。谢谢各位了。
...全文
25 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jerry 2005-03-26
Microsoft在Win2000及其后续版本的操作系统中提供了tool help library(工具帮助库)为我们利用,ToolHelp32函数库封装在kernel32.dll里,它的定义在头文件tlhelp32.h中。我们可以调用CreateToolhelp32Snapshot来对当前系统中运行的进程拍个“快照”,找到第一个进程后不断循环,直到遍历所有的进程。每到到一个进程都从该进程的PROCESSENTRY结构中提取出th32ProcessID和szExeFile,以获取进程ID和进程名。
完整的源代码如下:

#include <windows.h>
#include <iostream.h>
#include <conio.h>
#include <tlhelp32.h>

int main(int argc, char* argv[])
{
HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdout,FOREGROUND_GREEN|FOREGROUND_INTENSITY);
SetConsoleTitle("简易进程查看器");
cout<<"*****************************************************************"<<endl;
cout<<" 简易进程查看器 作者:浊清"<<endl;
cout<<"欢迎来到冰点极限论坛http://xiaomutou.51.net/bbs";<<endl;
cout<<"*****************************************************************"<<endl;
cout<<"按回车查看当前所有进程:"<<endl;
int ch1;
ch1=getche();
if(ch1=='\r')
{
SetConsoleTextAttribute

(hStdout,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
HANDLE hSnapshot=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize=sizeof(pe);
BOOL bMore=::Process32First(hSnapshot,&pe);
while(bMore)
{
HANDLE hProcess=::OpenProcess

(PROCESS_QUERY_INFORMATION,FALSE,pe.th32ParentProcessID);
cout<<"Process ID:"<<pe.th32ProcessID<<", Process

Name:"<<pe.szExeFile<<endl;
::CloseHandle(hProcess);
bMore=::Process32Next(hSnapshot,&pe);
}
}
SetConsoleTextAttribute(hStdout,FOREGROUND_GREEN|FOREGROUND_INTENSITY);
cout<<"\n按任意键退出:"<<endl;
int ch2;
ch2=getche();
CloseHandle(hStdout);
hStdout=NULL;
return 0;
}
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-26 09:22
社区公告
暂无公告