Страница 1 из 1
(решено)Зарегистрировать расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 10:49:58
vitaly_l
Всем привет,
как всегда непонятки с системой

.
Хочется уметь программно привязывать своё расширение к своим программам, чтобы при клике на файл они запускались.
Программно зарегистрировать своё расширение (*.ext) в Windows, как?спасибо.
.
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 11:12:37
olegy123
Вроде как через реестр все делается.
Добавлено спустя 2 минуты 53 секунды:http://forum.oszone.net/post-2585475-147.htmlДобавлено спустя 7 минут 33 секунды:uses Registry;
http://wiki.freepascal.org/fcl-registryhttp://icops.narod.ru/reestr.htm
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 11:22:00
Cheb
Кури раздел реестра 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.
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 14:59:45
vitaly_l
olegy123 писал(а):через реестр все делается.
Спасибо. У windows есть программа, которая прилинковывает программы, после выбора пользователем.
Вот бы к ней обратиться из программы? Суть в том что она - не требует прав Админа.
Cheb писал(а):работать с правами администратора - модно
Да, с правами администратора получилось. Спасибо. Но безумно хочется прилинковать расширение без прав администратора.
HKEY_CURRENT_USER - не требует прав.

Как-то можно ли прилинковать расширение через
HKEY_CURRENT_USER ?
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 16:07:48
Cheb
Как-то можно ли прилинковать расширение через
Я дал кусок кода который именно это делает (привязывает *.rrp файлы к екзешнику, из которого вызвана)
Не притворяйся идиотом.

Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 16:52:20
vitaly_l
Cheb писал(а):Я дал кусок кода который именно это делает (привязывает *.rrp файлы к екзешнику, из которого вызвана)
всё верно. код прекрасно работает. СПАСИБО! Но код работает,
только с правами администратора, т.к. сюда в HKEY_CLASSES_ROOT - без прав не пишет. А в HKEY_CURRENT_USER - можно писать без прав администратора, но там всё по другому устроено. Но как-то должно работать, т.к. можно настроить ассоциации для каждого пользователя.
Поэтому я и спросил, вдруг кто нить знает, как сделать ассоциацию через HKEY_CURRENT_USER ?
Гадать там бессмысленно, нужно именно знать. Перепробовал 33 варианта - не получается ассоциировать без прав.
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 17:05:44
pupsik
vitaly_l выше, вроде как, ответили на ваш вопрос.
Можно ещё и на сайт мелких
послать. Или поищите нечто
такого.
Re: Зарегистрировать своё расширение (*.ext) в Windows, как?
Добавлено: 23.04.2017 17:06:08
Лекс Айрин
Попробуй обратиться из программы к утилите reg
http://www.winpedia.ru/content/view/901/58 но, скорее всего, тоже потребует прав админа.
Вообще, ручное управление реестром такая опасная штука, что тут надо действовать как в песне "две шаги налево, две шаги направо, шаг вперед и два назад".
Re: решено)Зарегистрировать расширение (*.ext) в Windows, ка
Добавлено: 23.04.2017 18:05:09
vitaly_l
pupsik писал(а):ыше, вроде как, ответили на ваш вопрос.
Можно ещё и на сайт мелких послать. Или поищите нечто такого.
всё тоже самое, как у Cheb - только прописывается, вот сюда: HKEY_CURRENT_USER\Software\Classes\
ВСЕМ БОЛЬШОЕ - ГРОМАДНОЕ МУЛЬТИ-СПАСИБО!!!
.
Re: (решено)Зарегистрировать расширение (*.ext) в Windows, к
Добавлено: 26.04.2017 09:31:23
Cheb
код прекрасно работает. СПАСИБО! Но код работает, только с правами администратора,
Упс
только с правами администратора
Я имею общее представление, что надо явно запросить у системы "я хочу внести изменения на этом компьютере", тогда при попытке записи UAC выведет классическое "программа пытается внести изменения на этом компьютере" и уже юзверь решает.
Но я не знаю деталей.
Добавлено спустя 2 минуты 5 секунд:Re: (решено)Зарегистрировать расширение (*.ext) в Windows, как?З.Ы. В подобных случаях чаще полезнее рыться через regedit, смотреть наглядно как оно там устроено, чем читать мануалы.
Re: (решено)Зарегистрировать расширение (*.ext) в Windows, к
Добавлено: 26.04.2017 09:40:48
vitaly_l
Cheb писал(а):В подобных случаях чаще полезнее рыться через regedit, смотреть наглядно как оно там устроено, чем читать мануалы
Суть в том что, как выяснилось, в regedit - эту информацию заносят по разному. Например родная виндусовая программа, пишет в реестр совсем другое и абсолютно в другие места. Я честно курил реестр стирал его и смотрел, что и куда прописывается при регистрации из виндусовой программы. Разница - очень большая, но например Лазарус, который тоже всё это прописывает в реестр, делает приведённым выше способом (с правами админа).
В общем сейчас всё работает и я забил на остальное. Реестр - это довольно громадная свалка мусора которая, еле шевелится, даже когда виндовз только установили. Копаться в нём - очень сложно и нужно иметь громадную силу воли, чтобы не взорвать микрософт за реестр и скорость поиска в нём.