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

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

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

Сообщений: 1805



Просмотр профиля WWW
« : Август 19, 2012, 16:30 »

Здравствуйте!
пишу на C++ Qt
есть программа, у программы есть собственный формат файла, который она использует при сохранении и загрузки данных

в винде: такой формат файлов имеет иконку как у программы, к которой ее привязали
при открытии такого файла открывается программа, привязанная к файлу
Наглядный пример: офис ворд

как можно привязать свой формат файлов к программе?
можно и просто для винды Улыбающийся

Просто никогда этим не занимался и не знаю даже как правильно в гугль вбить описание своего вопроса Смеющийся
Записан

MoPDoBoPoT
Гость
« Ответ #1 : Август 19, 2012, 16:55 »

Windows, Ассоциации файлов
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Август 19, 2012, 17:21 »

Спасибо Улыбающийся
Записан

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

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Август 19, 2012, 17:58 »

недавно сам прикручивал ассоциацию файлов к приложению (винда и мак ос), выкладываю почти готовый к употреблению класс. несколько замечаний:
  • описание файла и программы жёстко зашиты в код (fileassociationmanager_win.cpp строки 39 и 66 соответственно), так что их желательно поменять Улыбающийся
  • в файле helpers.h лишь объявлены макросы для вывода месседжбоксов (например ERROR_BOX_NO_PARENT()), поэтому его не выкладываю, а их вызовы можно просто стереть
  • поддержка Windows Vista и выше присутствует
  • чтобы на Windows 7 ассоциации обновлялись, надо сначала задать application user model id (например при запуске приложения):
Код
C++ (Qt)
static const QString kMyExtension(".ext");
 
#ifdef WIN_7_OR_LATER
typedef HRESULT (__stdcall *PSCPEAUMID)(PCWSTR); // SetCurrentProcessExplicitAppUserModelID()
#endif
 
PCWSTR appUserModelID()
{
   static const QString progId = FileAssociationManager::progIdForExtension(kMyExtension);
   return progId.utf16();
}
 
MyMainWidget::MyMainWidget(QWidget *parent) : QWidget(parent)
{
#ifdef WIN_7_OR_LATER
   PSCPEAUMID pSetCurrentProcessExplicitAppUserModelID = (PSCPEAUMID)GetProcAddress(GetModuleHandle(L"shell32.dll"), "SetCurrentProcessExplicitAppUserModelID");
   if (pSetCurrentProcessExplicitAppUserModelID)
       pSetCurrentProcessExplicitAppUserModelID(appUserModelID());
#endif
}
Записан

Изучением 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
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 19, 2012, 20:22 »

"Мишке там сказали нет - ну а мне пожалуйста"  Улыбающийся

kambala, спасибо! У меня как раз была эта мелкая но противная проблемка - др приложение перебивает мое extension. И я все оттягивал неприятный момент гугления и рыскания в нативняке. И не зря - перевел Ваш код на плюсы - вроде бычит, во всяком случае в Finder все гуд 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Август 20, 2012, 00:21 »

пожалуйста
перевел Ваш код на плюсы
я так понимаю переводить пришлось только функцию NSStringFromQString в CFStringRefFromQString? Улыбающийся
Записан

Изучением 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
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Август 20, 2012, 12:33 »

я так понимаю переводить пришлось только функцию NSStringFromQString в CFStringRefFromQString? Улыбающийся
Ну да  Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Август 22, 2012, 17:26 »

Спасибо, kambala, посмотрю ваш код на досуге Улыбающийся
Записан

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Август 22, 2012, 18:12 »

Получается у виндоус хр и висты/7 ассоциация файлов в реестре разная?
Записан

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

Сообщений: 4727



Просмотр профиля WWW
« Ответ #9 : Август 22, 2012, 20:22 »

для висты и выше там добавились некоторые новые фичи, которые желательно использовать, но ХР-подход также работает. но все равно большая часть кода для обоих систем одинакова — QSysInfo я использую всего пару раз.
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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