2012-04-21 10 views
1

のアイコンを取得していない私がやっているだけの抜粋です:C/C++のWindows - ExtractIcon()ここではすべての実行可能ファイル

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のプロンプト、他のプログラムです。

+0

クロムは、タブフレーム(AFAIK)ごとに1つのプロセスを使用します。タブのフレームにはアイコンがまったく含まれていないのが普通です。 – mfontanini

+0

さて、私はクロムが最高の例ではないことを知っていますが、ssにあった。それは、トリリアンやアイコンを持っている他のプログラムからでもそれをやっているだけです。 – user1334943

+0

コードに必要なエラー処理がすべて不足しているため、なぜ動作しないのかわかりません。 PROCESS_ALL_ACCESSを使用してすべてのプロセスを開くことができないようにするには、あまりにも多くの権限を要求します。 –

答えて

3

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

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

関連する問題