Показать сообщение отдельно
  #3  
Старый 30.08.2022, 19:12
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
бинарник 32 бита?
Таи, вроде, были заморочки, что для 32 битных бинарников своя копия реестра. Вроже, если пишешь в HKEY_LOCAL_MACHINE, то будет работать,а вот с HKEY_CURRENT_USER какие-то заморочки.

ЗЫ. Я отказался от регистрации ассоциаций из самого экзешника в пользу регистрации при инсталяции. Пользуюсь InnoSetup. Он делает все правильно.

ЗЗЫ. По коду. А кто будет закрывать ключи за тобой. Можнт потому и не работает?

ЗЗЫ2. Расширение с точкой передаешь? Типа ".txt"?

ЗЗЫ3. А, кажется понял почему не работает. Смотри вот этот пример внимательно:
https://stackoverflow.com/questions/...e-current-user
В первом ключе надо писать не имя экзешника, а имя программы, т.е. в твоем случае "ProText"
Далее, что за извращение в строке 11 и 13? ParamStr(0) уже дает тебе полный путь к бинарнику.
В строке 13, вроде, пробела не хватает (разделение имени бинарника и параметра).
Код:
Function asss(Const Ext, ExeName: String): Boolean;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey('\Software\Classes\.'+ Ext, TRUE) then
        WriteString('', 'ProText');
      if OpenKey('\Software\Classes\ProText', TRUE) then
        WriteString('', 'My Very Own Text File Type');
      if OpenKey('\Software\Classes\ProText\DefaultIcon', TRUE) then
        WriteString('', ParamStr(0));
      if OpenKey('\Software\Classes\MyAppDataFile\shell\open\command', TRUE) then
        WriteString('', ParamStr(0) + ' "%1"');
    finally
      Free;
    end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
end;
Всё ровно не работает..
Наверно проще будет сказать, что в реестре должно появится и по какому пути...
Я просто не понимаю саму суть этого всего..
Вот что в реестре:
Ответить с цитированием