获取进程信息:使用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函数中调用此函数,以便在对话框初始化时显示进程信息。
方法一:找一张ICO图标,替换programname/res/programname.ico文件,就可以啦,这时候你运行后得到的图标可能还是原来MFC的默认图标,这时候你只要把工程目录下的Debug和Release文件删除掉,重新编译生成就能得到更换图标后的程序。或者直接RebuildAll,再运行,怎么样很简单吧。另外,也可以在工程中 *** 作,在工作区的resorce页中的Icon中把ID为IDR_MAIN的图标资源删除,再导入自己制作的图标资源,把资源ID改为IDR_MAIN即可。
方法二:
上面这个的工作十分简单,但是如果要在程序中写代码改变我们应用程序的图标,比如有时候我们要在程序中动态改变程序的标题栏、任务栏图标或是托盘的图标,那就要花点功夫了。其实也不是很难,主要用几个函数搞定,如果是MFC主要就是
LoadIcon和
SetIcon。
比如我们在OnInitDialog或是OnCreate中加入:
AfxGetApp()->LoadIcon(IDI_ICON1)
SetIcon(ico,true)
SetIcon(ico,false)
另外你可能要问,MFC程序默认是怎么加载它的图标的,其实很简单,在主对话框的构造函数中有这样一句:
m_hIcon
=
AfxGetApp()->LoadIcon(IDR_MAIN)
这就是加载默认图标的,而在OnInitDialog初始化函数中有这两行代码:
SetIcon(m_hIcon,
TRUE)
//
Set
big
icon
SetIcon(m_hIcon,
FALSE)
//
Set
small
icon
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)