1

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

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

4

1 回答 1

4

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

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

于 2012-04-21T19:27:41.583 回答