Собственно решил написать пример реализации ассоциации через Qt. Может кому поможет.
Реализация представленна в виде флажка (QCheckBox) который и ассоциирует файлы с программой.
1. Проверяем ассоциацию, если уже связано с нашей программой - отмечаем флажок (если система отличная от Windows - опция недоступна)
associate=new QCheckBox;
#ifdef Q_WS_WIN
{
bool checked=false;
QSettings reg("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
if(reg.value("/MyProg.mpf/shell/open/command/.").toString().contains("myprog.exe"))
checked=true;
associate->setChecked(checked);
connect(associate, SIGNAL(stateChanged(int)),SLOT(slotAssociate(int)));
}
#else
associate->setDisabled(true);
#endif
2. Реализуем слот для ассоциации
void MyProg::slotAssociate(int state)
{
#ifdef Q_WS_WIN
QSettings reg("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
if(state==Qt::Checked){
reg.setValue("/.mpf/.", "MyProg.mpf");
reg.setValue("/MyProg.mpf/DefaultIcon/.", QDir::toNativeSeparators(QCoreApplication::applicationDirPath())+"\\mpf.ico");
reg.setValue("/MyProg.mpf/shell/open/command/.", '"'+QDir::toNativeSeparators(QCoreApplication::applicationFilePath())+"\" \"%1\"");
}else if(state==Qt::Unchecked){
reg.setValue("/MyProg.mpf/shell/open/command/.", "");
}
#endif
}
Примечания:
.mpf - расширение файла с которым будем связывать программу
MyProg - собственно имя самой программы
mpf.ico - имя значка для связанного файла, должен находится в папке с программой