![]() |
|
|
#1
|
|||
|
|||
|
Короче говоря, код действует. Ассоциации заносятся в реестр, но не работают.
Код:
procedure Associate;
var s:string;
begin
Reg:=TRegistry.Create; // создаем
Reg.RootKey := HKEY_CLASSES_ROOT; // указываем корневую ветку
Reg.OpenKey('.dcu\OpenWithList\', true);
Reg.WriteString('TestApplication.dcu', '');
Reg.OpenKey('\TestApplication.dcu\DefaultIcon\', true);
s:=Application.ExeName+',0';
Reg.WriteString('', s);
Reg.OpenKey('\TestApplication.dcu\Shell\Open\', true);
Reg.WriteString('', 'Открыть в TestApplication');
Reg.OpenKey('command\', true);
s:='"'+Application.ExeName+'" "%1"';
Reg.WriteString('', s);
Reg.Free;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;Почему? |
|
#2
|
||||
|
||||
|
Попробуй через InstalShield. Я тоже долго мучался, а через инсталятор все быстро и аккуратно получилось.
|
|
#3
|
||||
|
||||
|
для расширения "ppc" код действует, ассоциации заносятся в реестр и работают:
Код:
uses
ShlObj, Registry,
var
reg: TRegistry;
begin
try
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CLASSES_ROOT;
reg.OpenKey('.ppc', True);
reg.WriteString('', 'ppc file');
reg.CloseKey;
reg.OpenKey('.ppc\shell\open\command', True);
reg.WriteString('', Application.ExeName);
reg.CloseKey;
reg.OpenKey('.ppc\defaulticon', True);
reg.WriteString('', Application.ExeName);
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
reg.Free;
end;
except
end;
end;Последний раз редактировалось NumLock, 17.04.2011 в 13:53. |