【转】通过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...

用CreateToolHelp32Snapshot 查看进程及其模块列表(delphi xe2)

原文出处:http://blog.csdn.net/htiscold/article/details/3962817     在delphi xe2下调试运行成功。   代码:   un...
  • bq_cui
  • bq_cui
  • 2011年11月13日 21:00
  • 1195

CreateToolhelp32Snapshot函数

DELPHI - CreateToolhelp32Snapshot函数 一、函数介绍 在Windows系统中动态链接库kernel32.dll提供了获取和处理系统进程的许多接口函数,Delphi语...

CreateToolhelp32Snapshot

  当前进程的枚举   要对当前系统所有已开启的进程进行枚举,就必须首先获得那些加载到内存的进程当前相关状态信息。在Windows操作系统下,这些进程的当前状态信息不能直接从进程本身获取,系统已为所有...

C++学习笔记: CreateToolhelp32Snapshot

CreateToolhelp32Snapshot CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个...

CreateToolhelp32Snapshot TH32CS_SNAPPROCESS

apiTlHelp32.h CreateToolhelp32Snapshot TH32CS_SNAPPROCESS PROCESSENTRY32 Process32First Process32N...

CreateToolhelp32Snapshot TH32CS_SNAPMODULE TH32CS_SNAPMODULE32

TlHelp32.h CreateToolhelp32Snapshot TH32CS_SNAPMODULE TH32CS_SNAPMODULE32 MODULEENTRY32 Module32Fir...

运行中获取当前执行位置所在类、所在函数等信息

目的:为方便Debug,需要在运行时确定当前执行位置的上下文信息,如确定当前执行代码所在类、所在文件,所在函数、所在行等。 思路: 1、使用Java的栈跟踪API。 2、使用反射机制? 具体实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转】通过CreateToolhelp32Snapshot函数获得系统中当前运行的进程信息
举报原因:
原因补充:

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