📄 processenum.cpp
字号:
#include "StdAfx.h"
#include ".\processenum.h"
//创建枚举数组
void CProcessEnum::CreateSysArray()
{
if(!isEmpty())
Clear();
HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//进程列表快照
PROCESSENTRY32 pro;
Process32First(hsnap,&pro);
PROCESSINFO proInfo;
BOOL isSys = FALSE;//是否系统进程
int index;
//将所有进程信息压入数组
while(Process32Next(hsnap,&pro))
{
index = 0;
while(strSysPro[index] != "ENDOFDIC") //过滤系统进程
{
if(pro.szExeFile == strSysPro[index])
{
isSys = TRUE;
break;
}
index++;
}
if(!isSys)
{
proInfo.hPro = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pro.th32ProcessID);
if(proInfo.hPro == 0)
continue;
proInfo.strProName = pro.szExeFile;
proInfo.dwProId = pro.th32ProcessID;
proInfoArray.Add(proInfo);
}
else
isSys = FALSE;
}
//过滤出不可见窗体
EnumWindows(EnumWindowsProc,(LPARAM)this);
}
//判断数组是否为空
BOOL CProcessEnum::isEmpty()
{
if(proInfoArray.GetSize())
return FALSE;
else
return TRUE;
}
//获取进程信息
DWORD CProcessEnum::GetProId(int index)
{
return proInfoArray[index].dwProId;
}
HANDLE CProcessEnum::GetHPro(int index)
{
return proInfoArray[index].hPro;
}
CString CProcessEnum::GetProName(int index)
{
return proInfoArray[index].strProName;
}
CString CProcessEnum::GetWndTitle(int index)
{
return proInfoArray[index].strTitle;
}
//获取数组长度
int CProcessEnum::GetSize()
{
return (int)proInfoArray.GetSize();
}
//判断一个进程ID是否在数组的一个结构里
int CProcessEnum::Contain(DWORD dwProId)
{
int size = GetSize();
int i = 0;
for(;i<size;i++)
{
if(dwProId == proInfoArray[i].dwProId)
return i;
}
return -1;
}
//删除
void CProcessEnum::RemoveAt(int index)
{
proInfoArray.RemoveAt(index);
}
void CProcessEnum::Clear()
{
proInfoArray.RemoveAll();
}
//设置窗体信息
void CProcessEnum::SetHWND(int index,HWND hWnd)
{
proInfoArray[index].hwnd = hWnd;
}
void CProcessEnum::SetWndTitle(int index,CString wndTitle)
{
proInfoArray[index].strTitle = wndTitle;
}
//进程枚举回调函数
BOOL CALLBACK CProcessEnum::EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
CProcessEnum *processInfo = (CProcessEnum*)lParam;
DWORD proId;
GetWindowThreadProcessId(hwnd,&proId);
int index = processInfo->Contain(proId);
if( index != -1)
{
if(!IsWindowVisible(hwnd))
{
// processInfo->RemoveAt(index);
return TRUE;
}
else
{
CHAR wndTitle[100];
GetWindowText(hwnd,wndTitle,100);
processInfo->SetHWND(index,hwnd);
CString s = wndTitle;
processInfo->SetWndTitle(index,s);
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -