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));

一部のプログラムでは機能し、他のプログラムでは機能しないのはなぜですか? 基本的には、それら、メモ帳、およびアイコンを取得するコマンドプロンプトのみであり、他のプログラムはありません。

4

1 に答える 1

4

このExtractIcon()関数は、実行可能ファイル/DLL に埋め込まれたアイコンをリソースとして抽出するように設計されています (たとえば、アイコンは.exeまたは.dllファイルの一部です)。アイコンがアプリケーションによって (たとえば、 を使用してファイルからLoadImage()) 動的に読み込まれる場合、 を使用してアイコンを取得することはできませんExtractIcon()

通常、Chrome タブのアイコンを Web サイトからダウンロードして表示するため、Chrome タブのアイコンを取得できない理由は簡単に説明できます。また、カスタム スキニングをサポートするアプリケーションでは、アイコンを抽出できないか、せいぜいデフォルトのアイコンしか表示されないのではないかと思います。

于 2012-04-21T19:27:41.583 に答える