(решено)Зарегистрировать расширение (*.ext) в Windows, как?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

(решено)Зарегистрировать расширение (*.ext) в Windows, как?

Сообщение vitaly_l » 23.04.2017 11:49:58

Всем привет,
как всегда непонятки с системой :cry: .

Хочется уметь программно привязывать своё расширение к своим программам, чтобы при клике на файл они запускались.
Программно зарегистрировать своё расширение (*.ext) в Windows, как?
спасибо.

.
Последний раз редактировалось vitaly_l 23.04.2017 19:07:01, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3064
Зарегистрирован: 31.01.2012 16:41:41

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение olegy123 » 23.04.2017 12:02:11

Вроде как через реестр все делается.

Добавлено спустя 2 минуты 53 секунды:
http://forum.oszone.net/post-2585475-147.html

Добавлено спустя 7 минут 33 секунды:
uses Registry;
http://wiki.freepascal.org/fcl-registry
http://icops.narod.ru/reestr.htm
olegy123
энтузиаст
 
Сообщения: 720
Зарегистрирован: 25.02.2016 12:10:20

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение Cheb » 23.04.2017 12:22:00

Кури раздел реестра HKEY_CLASSES_ROOT

Кидаю кусок своего древнекода - может нынче и не работать, писалось когда XP была молода а работать с правами администратора - модно.

Код: Выделить всё
unit srtretimer_reg;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Registry;
 
  function RegisterSelf: boolean;

implementation

  function RegisterSelf: boolean;
  var
    R: TRegistry;
    a, b: string;
  begin
    Result:=False;
    R:=TRegistry.Create;
    R.LazyWrite:=false;
    R.RootKey:=HKEY_CLASSES_ROOT;
    R.OpenKey('\.rrp', true);
    R.WriteString('','RipRetimerProject');
    R.OpenKey('\RipRetimerProject', true);
    R.WriteInteger('EditFlags', 0);
    R.WriteInteger('BrowserFlags', 8);
    R.WriteString('', 'Файл сценария RipRetimer');
    R.OpenKey('\RipRetimerProject\DefaultIcon', true);
    R.WriteString('', ExtractFilePath(ParamStr(0)) + 'ripretimer.ico,0');
    R.OpenKey('\RipRetimerProject\shell', true);
    R.WriteString('','open');
    R.OpenKey('\RipRetimerProject\shell\open\command', true);
    a:='"' + ParamStr(0) + '" "%1"';
    if R.ValueExists('') then  b:=R.ReadString('') else b:='';
    if b = a
      then Result:=True
      else R.WriteString('', a);
    R.Free;
  end;
end.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 590
Зарегистрирован: 06.06.2005 15:54:34

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение vitaly_l » 23.04.2017 15:59:45

olegy123 писал(а):через реестр все делается.

Спасибо. У windows есть программа, которая прилинковывает программы, после выбора пользователем.
Вот бы к ней обратиться из программы? Суть в том что она - не требует прав Админа.
Cheb писал(а):работать с правами администратора - модно

Да, с правами администратора получилось. Спасибо. Но безумно хочется прилинковать расширение без прав администратора.

HKEY_CURRENT_USER - не требует прав.
:roll: Как-то можно ли прилинковать расширение через HKEY_CURRENT_USER ?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3064
Зарегистрирован: 31.01.2012 16:41:41

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение Cheb » 23.04.2017 17:07:48

Как-то можно ли прилинковать расширение через

Я дал кусок кода который именно это делает (привязывает *.rrp файлы к екзешнику, из которого вызвана) :|
Не притворяйся идиотом. :x
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 590
Зарегистрирован: 06.06.2005 15:54:34

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение vitaly_l » 23.04.2017 17:52:20

Cheb писал(а):Я дал кусок кода который именно это делает (привязывает *.rrp файлы к екзешнику, из которого вызвана)

всё верно. код прекрасно работает. СПАСИБО! Но код работает, только с правами администратора, т.к. сюда в HKEY_CLASSES_ROOT - без прав не пишет. А в HKEY_CURRENT_USER - можно писать без прав администратора, но там всё по другому устроено. Но как-то должно работать, т.к. можно настроить ассоциации для каждого пользователя.

Поэтому я и спросил, вдруг кто нить знает, как сделать ассоциацию через HKEY_CURRENT_USER ?
Гадать там бессмысленно, нужно именно знать. Перепробовал 33 варианта - не получается ассоциировать без прав.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3064
Зарегистрирован: 31.01.2012 16:41:41

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение pupsik » 23.04.2017 18:05:44

vitaly_l выше, вроде как, ответили на ваш вопрос.
Можно ещё и на сайт мелких послать. Или поищите нечто такого.
pupsik
энтузиаст
 
Сообщения: 1009
Зарегистрирован: 20.08.2014 16:20:13

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?

Сообщение Лекс Айрин » 23.04.2017 18:06:08

Попробуй обратиться из программы к утилите reg http://www.winpedia.ru/content/view/901/58 но, скорее всего, тоже потребует прав админа.
Вообще, ручное управление реестром такая опасная штука, что тут надо действовать как в песне "две шаги налево, две шаги направо, шаг вперед и два назад".
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4093
Зарегистрирован: 19.02.2013 16:54:51

Re: решено)Зарегистрировать расширение (*.ext) в Windows, ка

Сообщение vitaly_l » 23.04.2017 19:05:09

pupsik писал(а):ыше, вроде как, ответили на ваш вопрос.
Можно ещё и на сайт мелких послать. Или поищите нечто такого.

всё тоже самое, как у Cheb - только прописывается, вот сюда: HKEY_CURRENT_USER\Software\Classes\


:roll: ВСЕМ БОЛЬШОЕ - ГРОМАДНОЕ МУЛЬТИ-СПАСИБО!!!


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3064
Зарегистрирован: 31.01.2012 16:41:41

Re: (решено)Зарегистрировать расширение (*.ext) в Windows, к

Сообщение Cheb » 26.04.2017 10:29:18

код прекрасно работает. СПАСИБО! Но код работает, только с правами администратора,

Упс :oops:

только с правами администратора

Я имею общее представление, что надо явно запросить у системы "я хочу внести изменения на этом компьютере", тогда при попытке записи UAC выведет классическое "программа пытается внести изменения на этом компьютере" и уже юзверь решает.
Но я не знаю деталей.

Добавлено спустя 2 минуты 5 секунд:
Re: (решено)Зарегистрировать расширение (*.ext) в Windows, как?
З.Ы. В подобных случаях чаще полезнее рыться через regedit, смотреть наглядно как оно там устроено, чем читать мануалы.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 590
Зарегистрирован: 06.06.2005 15:54:34

Re: (решено)Зарегистрировать расширение (*.ext) в Windows, к

Сообщение vitaly_l » 26.04.2017 10:40:48

Cheb писал(а):В подобных случаях чаще полезнее рыться через regedit, смотреть наглядно как оно там устроено, чем читать мануалы

Суть в том что, как выяснилось, в regedit - эту информацию заносят по разному. Например родная виндусовая программа, пишет в реестр совсем другое и абсолютно в другие места. Я честно курил реестр стирал его и смотрел, что и куда прописывается при регистрации из виндусовой программы. Разница - очень большая, но например Лазарус, который тоже всё это прописывает в реестр, делает приведённым выше способом (с правами админа).

В общем сейчас всё работает и я забил на остальное. Реестр - это довольно громадная свалка мусора которая, еле шевелится, даже когда виндовз только установили. Копаться в нём - очень сложно и нужно иметь громадную силу воли, чтобы не взорвать микрософт за реестр и скорость поиска в нём.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3064
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru