Jak pobrac obraz ikony przypisanej w windzie do danego rozszerzenia??
Uses ShellApi;
{...}
Var SHI:_SHFILEINFO;
Ikona:TIcon;
{...}
SHGetFileInfo(PChar('nazwa pliku'),0,SHI,SizeOf(SHI),SHGFI_ICON OR SHGFI_SMALLICON);
Ikona.Handle:=SHI.hIcon;
{...}
Hm... w tym tylko problem, ze ja nie mam pliku. Moge oczywiscie utworzyc plik jakikolwiek z interesujacym mnie rozszerzeniem, potem pobrac ikone i plik usunac. I tak w ostatecznosci zrobie. Ale moze jest jakis szybszy sposob na pobranie ikony do rozszerzenia a nie od jakiegos pliku??
Ja osobiście szukałbym w rejestrze... Gdzieś te wszystkie informacje są zapisane, ale klucza nie podam, bo sam nie wiem... Trzebaby poszukać.
Wydaje mi się, że na ten temat była wskazówka w FAQ, ale mogę się mylić
Podany kod podaje dokładną ścieżkę do ikony skojarzonej z rozszerzeniem
function TForm1.GetIconPath(ext: string): string;
var
Reg:TRegistry;
srch:string;
begin
Reg:=TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(ext,False);
srch:=Reg.ReadString('');
Reg.CloseKey;
Reg.OpenKey(srch+'\DefaultIcon',False);
result:=Reg.ReadString('');
Reg.CloseKey;
Reg.Free;
end;
Rozszerenie podajemy z kropką na początek. Na przykład:
ShowMessage(GetIconPath('.hlp'));
Teraz załaduj plik ikony z zasobów. Liczba po przecinku definiuje numer zasobu.
To ja dorzuce coś jeszcze tytułem komentarza:
Każde rozszerzenie pliku zarejestrowane w systemie posiada swój własny klucz o nazwie .xxx gdzie xxx to rozszerzenie. Te wzystkie klucze znajdują się w kluczu HKEY_CLASSES_ROOT. W każdym z tych kluczy .xxx znajduje się wartość domyślna ,która jest jednocześnie nazwą drugiego klucza skojarzonego z tym rozszerzeniem(ten drugi klucz również znajduje się w HKEY_CLASSES_ROOT). Np klucz ".bat" zawiera wartość domyślną "batfile".Zatem istnieje drugi klucz "batfile" W tym drugim kluczu związanym z tym rozszerzeniem znajduje się min ścieżka do ikony związanej z tym roszerzeniem oraz zdefiniowane polecenia ,które pojawiają się po kliknięciu prawym klawiszem myszy na plik o danym rozszerzeniu.Tutaj można np zdefiniować co się stanie po dwukrotnym kliknięciu myszką na plik o danym rozszerzeniu.
Pozdrawiam
OK to juz jestem blisko, tylko ze to chyba nie sciazka do ikony? np. dla pliku bmp jest sciezka 'shimgvw.dll,1'? I co dalej??
OK to juz jestem blisko, tylko ze to chyba nie sciazka do ikony? np. dla pliku bmp jest sciezka 'shimgvw.dll,1'? I co dalej??
Użyj ExtractIcon zwraca ona uchwyt do ikony. (HICON) Po dalsze przykłady odsyłam do Helpa albo do wyszukiwarki :)
było gdzieś na torrym... nie trzeba było mieć pliku...