Ну 100% не создал экземпляр класса Reg:Tregistry. (Ни создания,ни освобождения, я не вижу).
Далее твоя ошибка это то что ты не закрыл ключ, в который пишешь. Твой код проще будет таким:
Код:
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if Reg.OpenKey('\shell\Open\Command', False) then
begin
Reg.WriteString('', ParamStr(0) + ' "%1"');
Reg.CloseKey;
end;
finally
FreeAndNil(Reg);
end;
end;
Вот так будет правильнее...
С подозрение на регистрацию нов. расширения файла, вот что у меня уже есть и я это благополучно использую:
Код:
{-------------------------------------------------------------------------------
Процедура: RegFileExt - Регистрирует новый тип файла в системе
Автор: Человек_Борща
Дата: 2011.03.07
Входные параметры: Ext, ExtDesc, ContextBtnText: string
Результат: Нет
Ext - Расширение с точкой(например: .hel)
ExtDesc - Описание файла(Например: HRLEL (Сокрашённая аббревиатура))
ContextBtnText - Текст кнопки контекстного меню
-------------------------------------------------------------------------------}
procedure RegFileExt(Ext, ExtDesc, ContextBtnText: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
//Если расширение или описание на заданы значит Error
if (Trim(Ext) = '') or (Trim(ExtDesc) = '') then
Exit
else
begin
try
//Регистрация нового типа файла
Reg.RootKey := HKEY_CLASSES_ROOT;
//Регистрируем расширение
Reg.OpenKey(Ext, True); //.ER
Reg.WriteString('', ExtDesc); //HLREL
Reg.CloseKey;
//Регестрируем иконку для файлов с этим расширением
Reg.OpenKey(ExtDesc + '\DefaultIcon', True);
Reg.WriteString('', ParamStr(0) + ',0');
Reg.CloseKey;
//Проверка на длинну
if not (Trim(ContextBtnText) = '') then
begin
//Кнопка в контекстное меню
Reg.OpenKey(ExtDesc + '\shell\Open', True);
Reg.WriteString('', ContextBtnText);
Reg.CloseKey;
end;
//Шелл-запуск
Reg.OpenKey(ExtDesc + '\shell\Open\Command', True);
Reg.WriteString('', ParamStr(0) + ' "%1"');
Reg.CloseKey;
finally
Reg.Free;
end;
//После регистрации расширения обновляем иконки(Нахрен нам перезапск ПК или килл explorer'а?)=)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;
end;
{-------------------------------------------------------------------------------
Процедура: UnRegFileExt - Удаляет указаный тип файла из системы
Автор: Человек_Борща
Дата: 2011.03.07
Входные параметры: Ext, ExtDesc: string
Результат: Нет
Ext - Расширение с точкой(например: .hel)
ExtDesc - Описание файла(Например: HRLEL (Сокрашённая аббревиатура))
-------------------------------------------------------------------------------}
procedure UnRegFileExt(Ext, ExtDesc: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
//Если расширение или описание на заданы значит Error
if (Trim(Ext) = '') or (Trim(ExtDesc) = '') then
Exit
else
begin
try
//Регистрация нового типа файла
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.DeleteKey(Ext);
Reg.DeleteKey(ExtDesc);
finally
Reg.Free;
end;
//После регистрации расширения обновляем иконки(Нахрен нам перезапск ПК или килл explorer'а?)=)
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;
end;
На здоровье!