2012-04-21 112 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

chrome每個選項卡框架(AFAIK)使用一個進程。這是正常的,然後該標籤的框架根本不包含任何圖標。 – mfontanini 2012-04-21 18:57:52

+0

是的,我知道鉻不是最偉大的例子,但在ss。從trillian或任何其他有圖標的程序中根本就沒有這樣做。 – user1334943 2012-04-21 19:02:08

+0

代碼缺少所有必需的錯誤處理,因此您不知道爲什麼它不起作用。您無法希望能夠使用PROCESS_ALL_ACCESS打開所有進程,這會要求太多權限。 – 2012-04-21 19:09:25

回答

3

ExtractIcon()功能旨在提取嵌入在可執行文件/ DLL中的圖標作爲資源(例如,圖標是.exe.dll文件的一部分)。如果應用程序動態加載圖標(例如,使用LoadImage()的文件),則無法使用ExtractIcon()檢索該圖標。

這很容易解釋爲什麼你無法獲得Chrome標籤的圖標,因爲他們通常從網站上下載圖標,然後顯示它。我也懷疑任何支持自定義皮膚的應用程序都不太可能允許您提取其圖標,或者最多隻給出默認圖標。