获取进程信息:使用Windows API函数EnumProcesses枚举系统中所有进程的ID,然后使用OpenProcess函数打开进程句柄,调用GetModuleFileNameEx函数获取进程名。
获取进程图标:使用Windows API函数ExtractIconEx获取进程程序文件的图标资源,然后使用GetIconInfo函数获取图标信息,使用CreateIconIndirect函数创建图标。
在MFC界面上显示进程名和图标:在对话框中添加一个列表框控件,使用InsertItem函数向列表框中添加项,然后使用SetItemText函数设置项的文本,使用SetItemImage函数设置项的图标。
示例代码如下:
C++
Copy code
// 遍历进程
void CProcessDlg::EnumerateProcesses()
{
DWORD aProcesses[1024], cbNeeded, cProcesses
if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return
cProcesses = cbNeeded / sizeof(DWORD)
for (int i = 0i <cProcessesi++)
{
// 打开进程句柄
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i])
if (!hProcess) continue
// 获取进程名
TCHAR szProcessName[MAX_PATH] = { 0 }
if (GetModuleFileNameEx(hProcess, NULL, szProcessName, MAX_PATH))
{
// 获取进程图标
HICON hIcon = NULL
int nIcons = ExtractIconEx(szProcessName, -1, NULL, &hIcon, 1)
if (nIcons == 1 &&hIcon)
{
ICONINFO info
GetIconInfo(hIcon, &info)
// 创建图标
HICON hNewIcon = CreateIconIndirect(&info)
if (hNewIcon)
{
// 添加项到列表框
int nIndex = m_listProcess.InsertItem(0, szProcessName)
m_listProcess.SetItemText(nIndex, 1, _T("描述信息"))
m_listProcess.SetItemImage(nIndex, (LPARAM)hNewIcon)
}
DestroyIcon(hIcon)
DestroyIcon(hNewIcon)
}
}
CloseHandle(hProcess)
}
}
这段代码会遍历系统中所有进程,获取进程名和图标信息,并将它们添加到对话框的列表框中。注意需要在对话框的OnInitDialog函数中调用此函数,以便在对话框初始化时显示进程信息。
添加icon 图标要保证图标是*.ico的格式。让后添加资源->导入,图标就会添加到Icon这个文件夹里了,至于大于256色只是不能显示,照样可以使用。这个没关系的。你所讲的添加后自动加到位图资源里面应该是图标格式不对.希望能够帮到你.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)