【转】通过CreateToolhelp32Snapshot函数获得系统中当前运行的进程信息

转载 2012年03月28日 09:58:03

通过调用CreateToolhelp32Snapshot函数可以对当前系统中运行的进程取一个快照,获得系统中运行的进程的相关信息,获得进程ID以后就可以通过OpenProcess函数获得进程的句柄,实现对进程的控制具体实现代码如下

#include <windows.h>
#include <tlhelp32.h>
BOOL CALLBACK EnumChildWindowProc(HWND hWnd,LPARAM lParam);//枚举记事本中的子窗口
char mess[2048];
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    HWND nphWnd=::FindWindow("notepad",NULL);
    if(nphWnd)
    {
        char temp[1024];
        PROCESSENTRY32 pe32;
        pe32.dwSize=sizeof(pe32);
        HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得进程列表的快照,第一个参数可以有其他选项,详细请参考MSDN
        if(hProcessSnap==INVALID_HANDLE_VALUE)
        {
            ::MessageBox(NULL,"CreateToolhelp32Snapshot error","error",MB_OK);
            return 0;
        }
        BOOL bMore=::Process32First(hProcessSnap,&pe32);//获得第一个进程的信息        
        while(bMore)
        {
            ::wsprintf(temp,"%s%s%s%d%s","进程名: ",pe32.szExeFile," 进程ID: ",pe32.th32ProcessID,"\r\n");
            ::strcat(mess,temp);
            HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
            if(hProcess==NULL)//如果无法获得进程句柄,则打印出错原因和信息
            {
                DWORD lerror=::GetLastError();
                char errormess[1024];
                ::wsprintf(errormess,"%s%d%s","error code: ",lerror," ");
                ::strcat(errormess,temp);
                ::MessageBox(NULL,errormess,"error",MB_OK);
            }
            bMore=::Process32Next(hProcessSnap,&pe32);//获得其他进程信息
        }
        ::EnumChildWindows(nphWnd,EnumChildWindowProc,0);//获得记事本的edit窗口,打印进程信息
        return 0;
    }
    else
    {
        ::MessageBox(NULL,"please open notepad","error",MB_OK);
        return 0;
    }
}
BOOL CALLBACK EnumChildWindowProc(HWND hWnd,LPARAM lParam)
{
    char temp1[256];
    if(hWnd)
    {
        ::GetClassName(hWnd,temp1,255);
        if(!::strcmp(temp1,"Edit"))//得到edit子窗口句柄
        {
            ::SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)mess);
            return 0;
        }
    }
    return true;
}



使用CreateToolHelp32Snapshot函数列出所有进程

列出所有进程,需要调用CreateToolHelp32Snapshot函数先得到系统进程快照的句柄,函数包含在头中。函数的具体格式如下: HANDLE_WINAPI CreateToolHelp32...
  • u012877472
  • u012877472
  • 2015年11月08日 15:37
  • 1113

Android中获取进程的有关信息

android进程信息 应用程序内存
  • wuyinlei
  • wuyinlei
  • 2016年01月03日 19:22
  • 4163

获取当前运行应用信息的几种方法

android5.0之前,获取任务栈最顶端的activity名 public String getTopActivity(){ ActivityManager manager = (Activ...
  • zero_zero_zero_zero
  • zero_zero_zero_zero
  • 2016年05月27日 10:41
  • 1394

Android开发之获取当前进程的信息的集合

Android开发之获取当前进程的信息的集合Android开发对于大家来说越来越接近。我们不用只局限于使用别人开发的应用。在开发部分手机卫士等类型的app时,肯定要获取到当前所有运行的进程 。并且...
  • li521wang
  • li521wang
  • 2016年12月24日 14:54
  • 955

获取进程列表和模块信息

获取本地进程列表与进程模块信息
  • enjoy5512
  • enjoy5512
  • 2016年06月02日 20:02
  • 3105

Linux获取当前用户信息函数

http://www.cnblogs.com/dirt2/p/5999842.html 转自:http://net.pku.edu.cn/~yhf/linux_c/function/07.h...
  • chenyijun
  • chenyijun
  • 2017年06月01日 15:26
  • 574

linux获取进程信息函数

Linux进程的管理 获取进程信息函数 进程又称任务,是一个动态的使用系统资源、处于活动状态的应用程序。 进程的管理由进程控制块PCB、进程调度、中断管理、任务队列等组成,它是linux文件系...
  • lemontree1945
  • lemontree1945
  • 2017年11月30日 15:09
  • 98

如何获取进程命令的详细信息

由于一些命令参数太多太长,所以ps -ef也无法显示的Command,如: # ps -ef   PID  Uid        VSZ Stat Command     1 root       1...
  • myths_0
  • myths_0
  • 2013年08月22日 02:09
  • 1631

获取当前运行程序路径

VC上或取当前路径有多种方法,最常用的是使用 GetCurrentDirectory和GetModuleFileName函数,个中都有诸多注意事项,特别总结一下。 一、获取当前运行目录的绝对路径 1、...
  • ddjj_1980
  • ddjj_1980
  • 2016年05月20日 10:01
  • 2546

获取进程或线程的ID以及句柄信息

先介绍一下创建线程或进程的时候是可以得到相应的ID以及句柄信息的。 BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandL...
  • swartz_lubel
  • swartz_lubel
  • 2017年03月12日 17:45
  • 918
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转】通过CreateToolhelp32Snapshot函数获得系统中当前运行的进程信息
举报原因:
原因补充:

(最多只允许输入30个字)