Russian Qt Forum
Май 16, 2024, 09:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Объясните как программно для ассоциированных файлов установить иконку (Windows)  (Прочитано 8398 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Ноябрь 05, 2012, 19:52 »

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

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

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

Объясните/покажите, как в реестре настроить показ иконки файла Улыбающийся
Записан

Serr500
Гость
« Ответ #1 : Ноябрь 05, 2012, 21:38 »

Код:
HKCR
  |
  -  .XPEH
  |   |
  |   - (По умолчанию)  = XPENFile
  |
  -  XPENFile
      |
      - DefaultIcon
         |
         - (По умолчанию) = PATH_TO_EXE\EXE_FILE,0
Без второй ветки почему-то косячит. Почему - ХЗ.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Ноябрь 06, 2012, 15:41 »

Может стоит сделать набор иконок для разных размеров с разным bpp? и впихунть в одну ico, например через iconlover.
Записан
Serr500
Гость
« Ответ #3 : Ноябрь 06, 2012, 16:44 »

Это несущественно. Без второй ветки реестра оно у меня косячило и при многостраничной иконке и при одиночной. Если иконка одна, то для меньших размеров она масштабируется, а для бОльших остаётся исходного размера.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Ноябрь 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);

Результат на скриншотах Улыбающийся

Иконка на рабочем столе вообще была до новой (в новой есть прозрачность), которая видна везде кроме раб стола, не понимаю, почему старая отображается, ведь и она была взята с ехе, и ее там нет, я проверял
Да и иконка, если смотреть через диалоги, видна нормально (видна новая)
В общем, единственный вопрос, приходящий в голову: что за нах??! какого??
« Последнее редактирование: Ноябрь 07, 2012, 02:42 от gil9red » Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Ноябрь 07, 2012, 02:56 »

Изменил расширения файла, использованного в программе, в итоге, на рабочем столе для нового расширения все равно показывается старая иконка, но зато иконка теперь видна в корне диска D, в отличии от предыдущего расширения, странно все это...
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4729



Просмотр профиля WWW
« Ответ #6 : Ноябрь 07, 2012, 11:52 »

пробовал перезапустить процесс explorer.exe?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Ноябрь 07, 2012, 22:40 »

Пробовал, после этого отображение иконок стало правильным, от части...
на рабочем столе иконка так и показывается старая
1 создаю папку на раб столе, копирую свой файл в эту папку - иконка старая
2 копирую этот файл на диск D - иконка новая
3 открываю папку рабочего стола - иконка новая

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

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Ноябрь 07, 2012, 22:45 »

Та работает оно, надо только порыться в ихней помойной яме (реестре). И не надо так элегантно сачковать "объясните как" - тут объяснять нечего, ройтесь  Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Ноябрь 08, 2012, 00:07 »

Дайте хоть пинка в нужном направлении Улыбающийся этоже как искать микроба в помойной кучи Веселый
Записан

V1KT0P
Гость
« Ответ #10 : Ноябрь 08, 2012, 00:22 »

Дайте хоть пинка в нужном направлении Улыбающийся этоже как искать микроба в помойной кучи Веселый
Посмотри как это делают популярные опен-сорсные программы такие как VLC, 7-zip, LibreOffice и т.д.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Ноябрь 08, 2012, 02:29 »

Дайте хоть пинка в нужном направлении Улыбающийся этоже как искать микроба в помойной кучи Веселый
Посмотри как это делают популярные опен-сорсные программы такие как VLC, 7-zip, LibreOffice и т.д.
Иконки у меня показываются, вот только на рабочем столе, показывается старая иконка, которая раньше было: после того как выбрал другую, на раб столе иконка не поменялась
Но если зайти в папку рабочего стола, то в ней показывается новая, и я спрашивал как с этим непотребством бороться Улыбающийся
Записан

Bepec
Гость
« Ответ #12 : Ноябрь 08, 2012, 06:54 »

Не ставить винду из сборок и обновлять рабочий стол почаще Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #13 : Ноябрь 08, 2012, 17:38 »

Не ставить винду из сборок и обновлять рабочий стол почаще Веселый
Веселый
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.