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

C++ C/C++;Windows-ExtractIcon()未检索所有可执行文件的图标,c++,c,windows,api,icons,C++,C,Windows,Api,Icons,以下是我正在做的事情的一小部分: PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return; if(!Process32First( hProcessSnap, &pe32)) {

以下是我正在做的事情的一小部分:

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提示符,没有其他程序。

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

这很容易解释为什么你不能得到Chrome标签的图标,因为他们通常从网站下载图标,然后显示出来。我还怀疑,任何支持自定义蒙皮的应用程序都不太可能允许您提取其图标,或者最多只提供默认图标。

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


这很容易解释为什么你不能得到Chrome标签的图标,因为他们通常从网站下载图标,然后显示出来。我还怀疑,任何支持自定义蒙皮的应用程序都不太可能允许您提取其图标,或者最多只能为您提供默认图标。

chrome在每个选项卡框架中使用一个进程(AFAIK)。这是正常的,标签的框架不包含任何图标。是的,我知道chrome不是最好的例子,但在ss中。它根本不是从trillian或任何其他有图标的程序中执行的。代码缺少所有必需的错误处理,因此您不知道为什么它不工作。您不能希望能够打开所有具有PROCESS_all_访问权限的进程,这要求太多的权限。错误代码主要是2个错误文件未找到,还有一些1813错误资源类型未找到Chrome每个选项卡帧使用一个进程(AFAIK)。这是正常的,标签的框架不包含任何图标。是的,我知道chrome不是最好的例子,但在ss中。它根本不是从trillian或任何其他有图标的程序中执行的。代码缺少所有必需的错误处理,因此您不知道为什么它不工作。您不能希望能够打开所有具有PROCESS_all_访问权限的进程,这要求太多的权限。错误代码主要是2个错误文件未找到,还有一些1813错误资源类型未找到