void parseArgs(QStringList args) { QSettings settings; QString sDefaultHostName = QHostInfo::localHostName(); QString sHostName = settings.value("hostname", QVariant(sDefaultHostName)).toString(); settings.setValue("hostname", QVariant(sHostName)); LOG_IN(QString("SETTINGS host name: %1").arg(sHostName)); QString sDefaultPort = "54340"; QString sPort = settings.value("port", QVariant(sDefaultPort)).toString(); settings.setValue("port", QVariant(sPort)); LOG_IN(QString("SETTINGS host port: %1").arg(sPort)); QString sDefaultRootPath = QString("%1/.Hobbyist_Software/VLC_Streamer/Root").arg(QDir::homePath()); QString sRootPath = settings.value("root", QVariant(sDefaultRootPath)).toString(); settings.setValue("root", QVariant(sRootPath)); LOG_IN(QString("SETTINGS root: %1").arg(sRootPath)); LOG_IN(QString("SETTINGS settings file %1").arg(settings.fileName())); if (!settings.isWritable()) { LOG_ER(QString("SETTINGS could not write file")); } settings.sync(); }
static bool setProgID(const QString &ProgID, const QString &typeDescription, const QString &friendlyName) { QString RootKeyName; QString classId; if (QSysInfo::WindowsVersion >= QSysInfo::WV_NT){ classId = "Software/Classes/" + ProgID; RootKeyName = "HKEY_CURRENT_USER"; }else{ classId = ProgID; RootKeyName = "HKEY_CLASSES_ROOT"; // Windows 95/98/ME } QSettings Reg (RootKeyName, QSettings::NativeFormat); if (!Reg.isWritable() || Reg.status() != QSettings::NoError) return false; QString appPath = qApp->applicationFilePath(); appPath.replace('/', '\\'); //Explorer gives 'Access Denied' if we write the path with forward slashes to the registry if(!typeDescription.isNull()) Reg.setValue(classId + REG_DEFAULT, typeDescription);/// Without this, will no able to create new text document. if(!friendlyName.isNull()) Reg.setValue(classId + "/shell/open/FriendlyAppName", friendlyName); Reg.setValue(classId + "/shell/open/command/.", QString("\"%1\" \"%2\"").arg(appPath, "%1")); Reg.setValue(classId + "/DefaultIcon/.", QString("\"%1\",0").arg(appPath)); /// Use the first icon of current program for default format icon. return true; }
bool setAssociation(const QString &extension, const QString &typeDescription, const QString &friendlyName) { if(!isSupportAssociation()) return false; #ifndef Q_WS_WIN return false; #else QSettings RegCR ("HKEY_CLASSES_ROOT", QSettings::NativeFormat); //Read only on NT+ QSettings RegCU ("HKEY_CURRENT_USER", QSettings::NativeFormat); if (QSysInfo::WindowsVersion < QSysInfo::WV_NT && !RegCR.isWritable()) //Win98 return false; QString ext("." + extension); QString ProgID = makeProgID(extension); //Check if ProgID exists in the registry, otherwise create it. if (!hasProgID(ProgID) && !setProgID(ProgID, typeDescription, friendlyName)) return false; if(checkAssociation(extension)) return true; //Create the associations if (QSysInfo::WindowsVersion >= QSysInfo::WV_NT){ RegCU.setValue("Software/Classes/" + ext + REG_DEFAULT, ProgID); //Extension class //Explorer FileExt association QString FileExtsKey = QString("Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts/") + ext; removeUserChoice(extension); RegCU.remove(FileExtsKey + "/Application"); /// Windows XP }else{ //Windows ME/98/95 support RegCR.setValue(ext + REG_DEFAULT, ProgID); } RegCU.sync(); RegCR.sync(); // SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);// Refresh Explorer cache. return (RegCU.status() == QSettings::NoError && RegCR.status() == QSettings::NoError); #endif // Q_WS_WIN }
bool clearAssociation(const QString & extension) { if(!isSupportAssociation()) return false; #ifdef Q_WS_WIN if(!checkAssociation(extension)) return true; QString ext("." + extension); QString ProgID = makeProgID(extension); QSettings RegCU("HKEY_CURRENT_USER", QSettings::NativeFormat); QSettings RegCR ("HKEY_CLASSES_ROOT", QSettings::NativeFormat); if (QSysInfo::WindowsVersion < QSysInfo::WV_NT && !RegCR.isWritable()) //Win98 return false; QString fileName = QFileInfo(qApp->applicationFilePath()).fileName(); QString FileExtsKey = QString("Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts/") + ext; /// Windows 7:"/UserChoice/Progid" ; XP: "/Progid" QString CurClassId = (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA) ? RegCU.value(FileExtsKey + "/UserChoice/Progid").toString() : RegCU.value(FileExtsKey + "/Progid").toString(); QString CurAppId = RegCU.value(FileExtsKey + "/Application").toString(); /// Windows XP if (!CurClassId.isEmpty() && ( (CurClassId == ProgID) || (0 == CurClassId.compare(fileName, Qt::CaseInsensitive)) || (0 == CurClassId.compare(QString("Applications\\%1").arg(fileName), Qt::CaseInsensitive)) ) ){ removeUserChoice(extension); } if (!CurAppId.isEmpty() && ( (CurAppId == ProgID) || (0 == CurAppId.compare(fileName, Qt::CaseInsensitive)) ) ){ RegCU.remove(FileExtsKey + "/Application"); } if (QSysInfo::WindowsVersion >= QSysInfo::WV_NT){ if (RegCU.value("Software/Classes/" + ext + REG_DEFAULT).toString() == ProgID) //Only remove if we own it /// This is no recommend to delete in MSDN, case it may cause other problems, such as cannot create new text document if delete '.txt' group. // RegCU.remove("Software/Classes/" + ext); RegCU.remove("Software/Classes/" + ProgID); }else{ //Windows 98 ==> Write to HKCR if (RegCR.value(ext + REG_DEFAULT).toString() == ProgID) // RegCR.remove(ext); RegCR.remove(ProgID); } RegCU.sync(); RegCR.sync(); // SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);// Refresh Explorer cache. return (RegCU.status() == QSettings::NoError && RegCR.status() == QSettings::NoError); #else return false; #endif // Q_WS_WIN }