Суть идеи заключается в том, чтобы осуществить поиск в реестре расширения в HKEY_CLASSES_ROOT, а найдя его получить его значение по умолчанию, а затем выполнить новый поиск уже для этого значения. Начнем, читаем значение по умолчанию ключа Shell \ Open \ Command.
{
Использование: //найти и запустить
var
sExe: string;
begin
sEXE:= GetExeByExtension('.htm') ;
if (sEXE <> '') and FileExists(sEXE) then
ShellExecute(Handle, 'OPEN', PChar(sEXE),
nil, nil, SW_SHOWNORMAL) ;
}
uses Registry;
function GetExeByExtension (sExt : string) : string;
var
sExtDesc: string;
begin
with TRegistry.Create do
begin
try
RootKey:= HKEY_CLASSES_ROOT;
if OpenKeyReadOnly(sExt) then
begin
sExtDesc:= ReadString('') ;
CloseKey;
end;
if sExtDesc <> '' then
begin
if OpenKeyReadOnly(sExtDesc +
'\Shell\Open\Command') then
begin
Result:= ReadString('') ;
end
end;
finally
Free;
end;
end;
if Result <> '' then
begin
if Result[1] = '"' then
begin
Result:= Copy(Result, 2, -1 +
Pos('"', Copy(Result, 2, MaxINt))) ;
end
end;
end;
Комментарии