C/C++ Windows - ExtractIcon() 未检索所有可执行文件的图标

C/C++ Windows - ExtractIcon() not retrieving icon for all executables

本文关键字:检索 可执行文件 图标 C++ Windows ExtractIcon      更新时间:2023-10-16

这只是我正在做的事情的片段:

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)   return;
if(!Process32First( hProcessSnap, &pe32))
{
        CloseHandle(hProcessSnap); // clean the snapshot object
         return;
 }    
do
{
     hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
     HICON icon = ExtractIcon((HINSTANCE)hProcess, pe32.szExeFile, 0);
}
while(Process32Next(hProcessSnap, &pe32));

为什么它适用于某些程序而不适用于其他程序? 它基本上只有那些,记事本和它获得图标的cmd提示符,没有其他程序。

ExtractIcon()函数旨在提取嵌入在可执行文件/DLL 中的图标作为资源(例如,图标是.exe.dll文件的一部分)。 如果图标由应用程序动态加载(例如,使用 LoadImage() 从文件中加载),则无法使用 ExtractIcon() 检索它。

这很容易解释为什么您无法获取Chrome标签页的图标,因为他们通常从网站下载图标然后显示它。 我还怀疑任何支持自定义皮肤的应用程序都不太可能允许您提取其图标,或者充其量只为您提供默认图标。

相关文章: