2012-04-21 2 views
1

에 대한 ExtractIcon() 검색하지 아이콘이 내가 뭘하는지의 단지 조각이다 :C/C++ 윈도우 - 모든 실행 여기에

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)를 사용합니다. 탭의 프레임에 아이콘이 전혀없는 것은 정상입니다. – mfontanini

+0

네, 크롬이 가장 좋은 예는 아니지만 ss에 있다는 것을 압니다. 트릴 리언이나 아이콘이있는 다른 프로그램에서는 전혀하지 않습니다. – user1334943

+0

코드가 필요한 모든 오류 처리가 누락되어서 왜 작동하지 않는지 알 수 없습니다. PROCESS_ALL_ACCESS로 모든 프로세스를 열 수 있기를 바랄 수는 없습니다. 너무 많은 권한을 요청합니다. –

답변

3

ExtractIcon() 기능 (예컨대 아이콘이 .exe.dll 또는 파일의 일부) 리소스로 실행/DLL에 포함 된 아이콘을 추출하도록 설계된다. 아이콘이 애플리케이션에서 동적으로로드 한 경우 (예 : LoadImage()을 사용하는 파일에서) ExtractIcon()을 사용하여 검색 할 수 없습니다.

Chrome 탭에 대한 아이콘을 얻을 수없는 이유는 웹 사이트에서 아이콘을 다운로드 한 다음 표시하기 때문입니다. 또한 사용자 정의 스키닝을 지원하는 모든 응용 프로그램에서 해당 아이콘을 추출 할 가능성이 없거나 기껏해야 기본 아이콘 만 제공 할 것으로 의심됩니다.