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

zzz通过调用CreateToolhelp32Snapshot函数可以对当前系统中运行的进程取一个快照,获得系统中运行的进程的相关信息,获得进程ID以后就可以通过OpenProcess函数获得进程的句柄,实现对进程的控制具体实现代码如下
ContractedBlock.gif ExpandedBlockStart.gif Code
#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;
}

转载于:https://www.cnblogs.com/feiyucq/archive/2009/10/09/1579703.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值