![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ассоциация файлов
Magedon © (2007-10-16 00:34:00)Доброе время суток, уважаемые.
Мне нужно ассоциировать некоторые типа файлов с моим приложением.
Почитав статьи, факи и мануалы, сделал несколько функций, которые проверяют, пишут, удаляют в ключикеHKEY_CURRENT_USER\Software\Classes\.
Однако потом оказалось что если файлу вручную сказать открыться с помощью другого приложения и поставить галку чтобы оно запомнило, все проверки и установки вHKEY_CURRENT_USER\Software\Classes\не работают.
Порылся в реестре нашел что оно пишеться вSoftware\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<Разширение>\P rogid.
Начал уитывать и это значение.
Но тут оказалось что в Висте и это не работает. Порывшись в вистовском реестре оказалось что они добавели вSoftware\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<Разширение>\< /CODE> ключ
UserChoice\, с которым мне пока не удаеться управиться. Потому что программа не должна требовать хай-привелегий.
Скажите пожалуйста существует ли у винды какие то апишные функции для управления ассоциациями, которые сами для разных версий виндов будут красиво все проверять и устанавливать?
Magedon (2007-10-16 14:38:00) [1]> [10] ter (16.10.07 13:34)
Спасибо, но это не совсем то что мне нужно. Это у меня есть и давно работает.
Только я пишу не вHKEY_CLASSES_ROOT, а вHKEY_CURRENT_USER\Software\Classes\потому что для вашего кода нужны права администратора. А у пользователя их может и не быть. А данные, записанные вHKEY_CURRENT_USER\Software\Classes\, Винда сама потом отобразит их вHKEY_CLASSES_ROOT. Это только если нужно регистрировать только для конкретного пользователя. Если же для всех, то вHKEY_LOCAL_MACHINE\Software\Classes\, но для этого потребуются админ. права. Советую так делать.
Кстати такая регистрация не всегда буде работать. Читайте первый пост [0] Magedon (16.10.07 00:34)
Меня интересует другое, есть ли нечто стандартное виндовское которое само буде отслеживать все ассоциации и в\Software\Classes\, и вSoftware\Microsoft\Windows\CurrentVersion\Explorer\FileExts. И учитывать особенности версий винды. Вот что мне нужно знать. Есть ли такой механизм. Или самому все отслеживать а с выходом новых виндов писать патчи.
Спасибо
ter (2007-10-16 13:34:00) [2]Function AssociateFileExt(FileExt, ProgramName, GRName, Info: String): Boolean;
Var R: TRegistry;
Begin
R := TRegistry.Create;
Result := False;
Try
R.RootKey := HKEY_CLASSES_ROOT;
R.OpenKey('.'+FileExt,True);
R.WriteString('',GRName);
R.CloseKey;
R.OpenKey(GRName,True);
R.WriteString('',Info);
R.CloseKey;
R.OpenKey(GRName+'\DefaultIcon',True);
R.WriteString('',ProgramName+' ,0');
R.CloseKey;
R.OpenKey(GRName+'\Shell',True);
R.WriteString('','Open');
R.CloseKey;
R.OpenKey(GRName+'\Shell\Open\Command',True);
R.WriteString('',ProgramName+' %1');
R.CloseKey;
R.Free;
Result := True;
Except
R.Free;
End;
End;
AssociateFileExt('myprog',ParamStr(0),'MYPROG','Документ "myprog"');
Magedon (2007-10-16 12:13:00) [3]Спасибо. Я понял ваши мнения по поводу ассоциации файлов, кто это должен делать и кто за это должен отвечать. Где-то и сам их разделяю. Однако программа не моя - я просто пишу что сказал начальник.
Однако я так и не получил ответа. Есть ли какаято группа апифункция, которая обслуживает ассоциирование файлов? И если есть подскажите.
Германн (2007-10-16 01:51:00) [4]
> Хорошее приложение бы спросило. Раз не спросило - значит
> плохое, фтопку его. Если спросило, а юзер подтвердил (но
> не должен был) - это его глупость.
"Хорошее приложение" обязано не только спросить. "Хорошее приложение" обязаноещё и сохранить прежние настройки, чтобы вернуть их при деинсталляции. В данной ситуации "глупость юзера" не является оправданием собственных недоработок.
Ins (2007-10-16 01:37:00) [5]
> [4] Magedon (16.10.07 01:29)
По мне, так это будут исключительно проблемы юзера и того приложения, которой изменило ассоциации не спросив юзера об этом. Хорошее приложение бы спросило. Раз не спросило - значит плохое, фтопку его. Если спросило, а юзер подтвердил (но не должен был) - это его глупость. Вы не обязаны защищать свое приложение от глупостей пользователя. А если юзер exe-шник удалит? Тоже от этого защищаться будете?
Но если так уж хочется, то можете в своей программе сделать возможность (где-нибудь в опциях) принудительно установить/сбросить ассоциации, если вдруг они сброшены или юзер больше в них не нуждается.
Германн (2007-10-16 01:35:00) [6]
> Magedon (16.10.07 01:29) [4]
Вот и подтверждение моим словам в [5].
:-)
Германн (2007-10-16 01:34:00) [7]
> Ins © (16.10.07 01:26) [2]
>
> Ну, а мое мнение - что это должен делать инсталлятор.
Не. Это должен делать автор программы. Ещё до её распространения! :)
И он похоже это уже понял. :)
> Потому что иначе, программу можно снести, а ассоциация останется.
> А так - инсталлятор связал разширение, деинсталлятор "развязал".
>
"Связал/развязал" - тоже надо делать с умом.
Magedon (2007-10-16 01:29:00) [8][2] Ins © (16.10.07 01:26)
Я с вами согласен. Но вот скажем такая ситуация:
Юзер после установки моего приложения устанавливает другое и автоматом прощелкивает ассоциации. Потом ему нужно вернуть. Так что ему инсталировать заново?
Ins (2007-10-16 01:26:00) [9]Ну, а мое мнение - что это должен делать инсталлятор. Потому что иначе, программу можно снести, а ассоциация останется. А так - инсталлятор связал разширение, деинсталлятор "развязал". Если юзер выберет для данного расширения другую программу - значит ему виднее, не нужно этому препятствовать, по ушам от юзеров получите.
Magedon (2007-10-16 01:26:00) [10]Спасибо вам за исчерпываючий ответ. Вы мне чень помогли. Сразу же имплементирую все что вы сказали в свое приложение.
Если бы я не задумывался то и не спрашивал.
Германн (2007-10-16 01:12:00) [11]
> Скажите пожалуйста существует ли у винды какие то апишные
> функции для управления ассоциациями, которые сами для разных
> версий виндов будут красиво все проверять и устанавливать?
>
WinAmp знаешь? Никогда не задавался вопросом - почему у него есть в меню пункт, в котором можно в любоймомент времени зарегистрировать ассоциации его с файлами некоторых типов?
А браузеры разные не пробовал? Не задавался вопросом - почему они при старте говорят, что он не является "браузером по умолчанию" и спрашивают нужно его сделать таким?