Название: Qt and file association (Ассоциации файлов) Отправлено: notnext от Июль 06, 2010, 14:02 Доброго времени суток. СКАЖУ СРАЗУ - ПОД ВИНДУ НИКОГДА НЕ ПИСАЛ! А СЕЙЧАС НАДА! >:(
Сталкнулся с такой задачей. Есть приложение постоенное на phonon которое крутит видео файлики. В диалоге настроек необходимо было сделать QCHeckBox - мол ассоциациировать этот тип файла или нет. К примеру .avi Если галочка стоит, то открываем моим приложением, если нет, то тем которое было установлено до меня. Сейчас использую ( reg.exe import|export|delete|add ) дергая его из QProcess МНЕ ЭТО НЕ ПОДХОДИТ!!!! Работает через раз и по разному на XP и 7 Вычитал еще, что ассоциации в виинде храняться: HKCR\.avi HKLM\Software\Classes\.avi Где именно и кто приоритетней не понял необходимо вроде создать HKLM\Software\Classes\MyApp.avi HKLM\Software\Classes\MyApp.avi\shell\open HKLM\Software\Classes\MyApp.avi\shell\play что то подобное и сделал при помощи reg.exe и QProcess И теперь я запутался! ПРОШУ ПОМОЩИ у тех кто это деелал! В итоге надо как-то сохранить старые ассоциации поставить мои и при отмене моих вернуть старые! Приложение должно работать на всех виндах начиная с XP. Как это грамотно и желательно побыстрее сделать? Буду очнь рад примеру или ошметку исходника ;) Название: Re: Qt and file association (Ассоциации файлов) Отправлено: DOOMer от Июль 06, 2010, 16:09 В винде читать и писать в реетср можно через QSettings. Как-то так (код не тестил, т.к. у меня не винда).
Код
Подробней смотрите в документации (http://doc.qt.nokia.com/4.6/qsettings.html) Название: Re: Qt and file association (Ассоциации файлов) Отправлено: zenden от Июль 06, 2010, 17:40 Как записать вроде-бы ясно.
Другой вопрос как это всё потом грамотно удалить ??? И есть ли кроссплатформенные библиотеки для этого ? чтобы хотя бы линь и вынь Название: Re: Qt and file association (Ассоциации файлов) Отправлено: DOOMer от Июль 06, 2010, 18:07 Удаление -- void QSettings::remove ( const QString & key ) тыц (http://doc.qt.nokia.com/4.6/qsettings.html#remove)
В Linux реестра нет, файловые ассоциации лежат в т.н "базе MIME-типов". http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html http://www.freedesktop.org/wiki/Specifications/mime-actions-spec Кроссплатформенного решения именно для "ассоциации типа файла со своим приложением" вроде бы нет. Название: Re: Qt and file association (Ассоциации файлов) Отправлено: notnext от Июль 07, 2010, 08:12 Кросс-платформенного решения НЕТ! Это факт! :'(
В UNIX системах вся настроечная инфа хранится в файликах типа .MyApp QSettings в UNIX'ах работают именно с этими файликами. QSettings в Windows работает с реестром. Это я в принципе знаю. Но хочу подчеркнуть что работа идет только со строками (считать, записасть) Еще раз хочу объяснить задачу. Мне необходимо: 1) сохранить настройки ассоциаций до меня (к примеру .wmv открывать в Windows Media Player, .avi открывать в VLC) 2) потом выставить свои (.wmv и .avi открывать моим) 3) и иметь возможность все вернуть обратно (1 шаг). Очень сильно еще интересует где их правильно выставить и откуда сохранить. В каких ветках реестра больший приоритет. Я именно там и запутался. Название: Re: Qt and file association (Ассоциации файлов) Отправлено: kuzulis от Июль 07, 2010, 08:34 Цитировать 1) сохранить настройки ассоциаций до меня (к примеру .wmv открывать в Windows Media Player, .avi открывать в VLC) Ну так при первом запуске вашего приложения сохраните те значения что были по умолчанию в реестре в каком-нить конфиге.Цитировать 2) потом выставить свои (.wmv и .avi открывать моим) Ну теперь выставляйте.Цитировать 3) и иметь возможность все вернуть обратно (1 шаг). т.к. вы ранее уже сохранили умолчательные настройки до этого в п.1. то восстановить не составит труда.Цитировать Очень сильно еще интересует где их правильно выставить и откуда сохранить. В каких ветках реестра больший приоритет. Я именно там и запутался. Ну так попробуйте методом тыка - перепривяжите какое нибудь расширение к другому приложению и посмотрите что и где изменилось в реестре.А если нужно реально разобраться - то на винфак! :) --- PS: Да, задачка не простая. PSPS: может это пригодится: http://delphidevelop.ru/publ/13-1-0-229 Название: Re: Qt and file association (Ассоциации файлов) Отправлено: Пантер от Июль 07, 2010, 11:37 Я для своего приложения делал ассоциацию. Вот выдранный код:
Код
Название: Re: Qt and file association (Ассоциации файлов) Отправлено: zenden от Июль 07, 2010, 12:04 А как вообще действуют другие приложения win при деинсталляции? Они просто удаляют ассоциации и ничего не восстанавливают?
Название: Re: Qt and file association (Ассоциации файлов) Отправлено: notnext от Июль 07, 2010, 13:22 А как вообще действуют другие приложения win при деинсталляции? Они просто удаляют ассоциации и ничего не восстанавливают? Вообще такую задачу, как ассоциация файлов решают с помощью инсталятора (В момент инсталяции ассоциируют, а в момент деинсталяции обычно ничего не делают) А в моем случае мне из программы нужно чекбоксом управлять ассоциацией (заказчик мудак хочет и все >:() |