Teorija:
Windows čuva asocijacije tipova file-ova u registry-ju, i to u HKEY_CLASSES_ROOT.
tu se nalaze mnoge stvari (koje možeš videtu iz regedit-a), a među njima i dve bitne za
ovaj problem:
1. Pod-kljucevi
.ext - u njima se nalazi samo jedan default-value sa imenom pod-ključa, koji
odredjuje sve ostalo.
Npr:
ključ
.txt sadrži vrednost
txtfile.
postoji ključ
txtfile u kome su sva ostala podesavanja.
Note: Ovo je uradjeno iz samo jednog razloga:
vise tipova file-ova može da otvara isti program...
2. Pod-ključevi npr
txtfile - u njima se nalaze sve informacije o ikonici, programu koji otvara file...
U ovom kjuču se nalaze mongi podključevi, od kojih su najvažniji:
DefaultIcon, koji određuje ikonu file-a
DefaultIcon ključ sadrži default value koji predstavlja ime ikone file-a
u formatu: \path\to\file.ext, iconindex
primer: C:\Windows\notepad.exe,1
Shell, koji određuje koje akcije mogu da se rade nad file-om, koji program uporebiti...
Shell ključ sadrži kao default value ime pod-ključa, koji je podrazumevana akcija (open ako je izostavljeno), i pod-ključeve sa akcijama koje mogu da se primene nad tim file-om.
Npr:
open, print...
Bilo koji od ovih, recimo
open sadrži kao default value ime akcije, koje će biti prikazano u meniju, kada se na file klikne desnim tasterom, i još neke pod-ključeve, od koji je najbitniji:
command - koji kao default value sadrži program koji treba da se izvrši:
primer: C:\Windows\notepad.exe "%1"
dakle ovako:
Code:
HKEY_LOCAL_MACHINE
.txt
(Default)=txtfile
txtfile
(Default)=Fajl sa tekstom
DefaultIcon
(Default)=C:\Windows\notepad.exe,1
Shell
(Default)=print
open
(Default)=Otovri ovaj file
command
(Default)=C:\Windows\notepad.exe "%1"
print
(Default)=Odstampaj ovaj file
command
(Default)=C:\Windows\notepad.exe /p "%1"
Ovo je samo primer, moglo je i drugacije...
Izvinjavam se na dugom postu, ali to je bilo potrebno objasniti.
Ovo, predpostavljam da nisi baš razumeo, mada ne znam... :-)
Praksa:
Evo ipak malo koda, koji će uraditi gore pomenuto...
Ovako, prvo treba ubaciti unit za rad sa registry-jem:
Code:
uses ..., Registry;
Onda, treba negde ubaciti proceduru (samo primer):
Code:
procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CLASSES_ROOT;
reg.OpenKey('.ext',true);
reg.WriteString('','extfile');
reg.CloseKey;
reg.OpenKey('extfile',true);
reg.WriteString('','Ovo je file .EXT');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\DefaultIcon',true);
reg.WriteString('','C:\path\to\icon.exe, 0');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell',true);
reg.WriteString('','Open');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Open',true);
reg.WriteString('','Otvori ovaj file');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Open\command',true);
reg.WriteString('','C:\path\to\exe.exe "%1"');
reg.CloseKey;
reg.Destroy;
reg.OpenKey('Prgname.Extenzija\Shell\Print',true);
reg.WriteString('','Otvori ovaj file');
reg.CloseKey;
reg.OpenKey('Prgname.Extenzija\Shell\Print\command',true);
reg.WriteString('','C:\path\to\exe.exe /p "%1"');
reg.CloseKey;
reg.Destroy;
end;
Nadam se da je jasno, i unapred se izvinjavam, ako je ovo bilo dosadno, ali mislim da je vredelo...
Pozdrav.
Sad ja znam zašto sam vam ovo ispričao, ovo će sigurno nekome koristiti....