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

通过调用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;
}



阅读更多
想对作者说点什么? 我来说一句

VC实现获取系统进程

2012年09月25日 30KB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭