Russian Qt Forum

Qt => Общие вопросы => Тема начата: leonike от Апрель 05, 2011, 18:53



Название: Windows, Ассоциации файлов
Отправлено: leonike от Апрель 05, 2011, 18:53
Здравствуйте.
Есть приложение, допустим лежит оно в "C:\Program Files\Application\app.exe

нужно чтобы файл с расширением ".mp3" (для примера) открывался этим приложением.

Знаю, что нужно проделывать манипуляции с реестром, что можно сделать с помощью QSettings. Смотрел эту (http://www.prog.org.ru/topic_14185_0.html) тему. Однако, не смог разобраться. Мог бы кто-нибудь подробно расписать как это сделать и объяснить.


Название: Re: Windows, Ассоциации файлов
Отправлено: Пантер от Апрель 05, 2011, 18:55
Что именно непонятно/не получается?


Название: Re: Windows, Ассоциации файлов
Отправлено: leonike от Апрель 05, 2011, 19:37
Что именно непонятно/не получается?
Да этот реестр темный лес )

во, кстати, ваш комментарий (http://www.prog.org.ru/index.php?topic=14185.msg92747#msg92747).

QSettings settings ("HKEY_CLASSES_ROOT", QSettings::NativeFormat);  - понятно

settings.setValue (".dbf/.", "QDBFRedactor.file"); - тут непонятно, ".dbf/." - это, как я понял, расширение файла, т.е. в моем случае будет ".mp3/.", а что такое "QDBFRedactor.file"

settings.setValue ("QDBFRedactor.file/.", tr("File of database")); - вообще не ясно, что такое )
settings.setValue ("QDBFRedactor.file/shell/open/command/.",                                                                                        
                                           "\"" + QDir::toNativeSeparators (QCoreApplication::applicationFilePath()) + "\"" + " \"%1\""); - тут указываем путь до экзешника приложения, если я правильно понял


Название: Re: Windows, Ассоциации файлов
Отправлено: Пантер от Апрель 05, 2011, 20:42
settings.setValue (".dbf/.", "QDBFRedactor.file"); - это привязка расширения к названию (на сколько я помню)
settings.setValue ("QDBFRedactor.file/.", tr("File of database")); - тут просто описание
А дальше да, путь.


Название: Re: Windows, Ассоциации файлов
Отправлено: leonike от Апрель 05, 2011, 21:07
вот как я делаю

Код:
QSettings regSettings("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
regSettings.setValue(".mp3\\.", qAppName());
regSettings.setValue("\\" + qAppName() + "\\shell\\open\\command", "\"" +
                         QDir::toNativeSeparators(qApp->applicationFilePath()) +
                         "\" %1");
Вот только ничего не работает

При выполнении кода: QSettings: failed to set subkey ".mp3\."


Название: Re: Windows, Ассоциации файлов
Отправлено: leonike от Апрель 06, 2011, 09:57
понял в чем дело, в ветку HKEY_CLASSES_ROOT можно писать только с админскими правами.

поэтому делаю так:
Код:
QSettings appRegSettings("HKEY_CURRENT_USER\\Software\\Classes\\" + qAppName() +
                             "\\shell\\open\\command",
                             QSettings::NativeFormat);
appRegSettings.setValue("Default",
                            "\"" + QDir::toNativeSeparators(qApp->applicationFilePath()) + "\" \"%1\"");

QSettings mp3Settings("HKEY_CURRENT_USER\\Software\\Classes\\.mp3", QSettings::NativeFormat);

mp3Settings.setValue("Default", qAppName());

Теперь реестр меняется, ветки появляются, и все работает!!  ;)