Russian Qt Forum

Qt => Общие вопросы => Тема начата: gil9red от Ноябрь 05, 2012, 19:52



Название: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 05, 2012, 19:52
Здравствуйте, уважаемые форумчане! :)
Есть приложение, и есть тип файлов, которое используется приложением, такой тип не является распространенным
Связываю такой тип в HKEY_CLASSES_ROOT, указывая тип файла, пусть будет XPEH (уважаемые форумчане, это сочетание цифр было напечатано латиницей! :D), тогда получается путь в реестре будет HKEY_CLASSES_ROOT/.XPEH, осталось связать этот тип с чем то
Связываю с действием открыть и указываю путь к программе, которая и будет запускаться, когда файл типа .XPEH будет открываться и укажем каким параметром нашей программы будет передаваться абсолютный путь к открываемому файлу HKEY_CLASSES_ROOT/.XPEH/shell/open/command/"С:\prog.exe" "%1",
Теперь настройка иконки, она будет лежать в ехе, с которым и ассоциируется файл:
HKEY_CLASSES_ROOT/.XPEH/DefaultIcon/С:\prog.exe, 2

Но иконки не меняются и не появляются!
Когда я мучался, и перезаписывал и создавал разделы в реестре, удавалось (не помню как, реестр то еще "удовольствие", особенно когда ради чистоты проверок, нужно убирать все что добавлял) показать иконки на файлах своего типа, но косячно: на рабочем столе своя иконка показывается, а в корне диска почему то нет, при просмотре файлов через диалоги открытия/сохранения не показывается, и тому подобное

Гугление не помолго, нашел пару сайтов, в которых кратко описана структура реестра виндовс, несколько сайтов делфи, в которых показывалось как с действием Открыть связать программу, и кучу сайтов, в которых популярным языком объясняется как с помощью одной мышки ассоциацию сделать (правый клик->открыть с помощью, и подобное)

Объясните/покажите, как в реестре настроить показ иконки файла :)


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: Serr500 от Ноябрь 05, 2012, 21:38
Код:
HKCR
  |
  -  .XPEH
  |   |
  |   - (По умолчанию)  = XPENFile
  |
  -  XPENFile
      |
      - DefaultIcon
         |
         - (По умолчанию) = PATH_TO_EXE\EXE_FILE,0
Без второй ветки почему-то косячит. Почему - ХЗ.


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: Fregloin от Ноябрь 06, 2012, 15:41
Может стоит сделать набор иконок для разных размеров с разным bpp? и впихунть в одну ico, например через iconlover.


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: Serr500 от Ноябрь 06, 2012, 16:44
Это несущественно. Без второй ветки реестра оно у меня косячило и при многостраничной иконке и при одиночной. Если иконка одна, то для меньших размеров она масштабируется, а для бОльших остаётся исходного размера.


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 07, 2012, 02:32
Получилось показать иконку, но опять начались странности

Код файла ресурсов rc
Код:
// иконка ехе
IDI_ICON1  ICON    DISCARDABLE     "images/icon.ico"

// дополнительная иконка, используемая в отображении файлов программы
1          ICON    DISCARDABLE     "images/iconFileNote.ico"

Код установления иконки:
Код:
    QSettings hkcr("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
    
    QString extension = "FileNote";
    QString executablePath =  QDir::toNativeSeparators(qApp->applicationFilePath());
    QString executableName = QFileInfo(executablePath).fileName();
    QString nameExe = QFileInfo(executableName).baseName();  

    hkcr.setValue(QString("/.%1/.").arg(extension),
                  QString("%1.%2")
                  .arg(nameExe)
                  .arg(extension));
    hkcr.setValue(QString("/%1.%2/DefaultIcon/.")
                  .arg(nameExe)
                  .arg(extension),
                  '"' + executablePath + '"' + "," + "1);

Результат на скриншотах :)

Иконка на рабочем столе вообще была до новой (в новой есть прозрачность), которая видна везде кроме раб стола, не понимаю, почему старая отображается, ведь и она была взята с ехе, и ее там нет, я проверял
Да и иконка, если смотреть через диалоги, видна нормально (видна новая)
В общем, единственный вопрос, приходящий в голову: что за нах??! какого??


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 07, 2012, 02:56
Изменил расширения файла, использованного в программе, в итоге, на рабочем столе для нового расширения все равно показывается старая иконка, но зато иконка теперь видна в корне диска D, в отличии от предыдущего расширения, странно все это...


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: kambala от Ноябрь 07, 2012, 11:52
пробовал перезапустить процесс explorer.exe?


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 07, 2012, 22:40
Пробовал, после этого отображение иконок стало правильным, от части...
на рабочем столе иконка так и показывается старая
1 создаю папку на раб столе, копирую свой файл в эту папку - иконка старая
2 копирую этот файл на диск D - иконка новая
3 открываю папку рабочего стола - иконка новая

Может где то что то на компе надо почистить, чтобы на раб столе правильно показывалось?
И почему если я открываю папки с раб.стола, в которых мой формат, то в них иконка старая, если я открою эти папки, но начну с Мой компьютер -> D: -> Document... -> User -> Desktop, то файлы имеют правильное отображение


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: Igors от Ноябрь 07, 2012, 22:45
Та работает оно, надо только порыться в ихней помойной яме (реестре). И не надо так элегантно сачковать "объясните как" - тут объяснять нечего, ройтесь  :)


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 08, 2012, 00:07
Дайте хоть пинка в нужном направлении :) этоже как искать микроба в помойной кучи :D


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: V1KT0P от Ноябрь 08, 2012, 00:22
Дайте хоть пинка в нужном направлении :) этоже как искать микроба в помойной кучи :D
Посмотри как это делают популярные опен-сорсные программы такие как VLC, 7-zip, LibreOffice и т.д.


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 08, 2012, 02:29
Дайте хоть пинка в нужном направлении :) этоже как искать микроба в помойной кучи :D
Посмотри как это делают популярные опен-сорсные программы такие как VLC, 7-zip, LibreOffice и т.д.
Иконки у меня показываются, вот только на рабочем столе, показывается старая иконка, которая раньше было: после того как выбрал другую, на раб столе иконка не поменялась
Но если зайти в папку рабочего стола, то в ней показывается новая, и я спрашивал как с этим непотребством бороться :)


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: Bepec от Ноябрь 08, 2012, 06:54
Не ставить винду из сборок и обновлять рабочий стол почаще :D


Название: Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
Отправлено: gil9red от Ноябрь 08, 2012, 17:38
Не ставить винду из сборок и обновлять рабочий стол почаще :D
:D