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();
}
Example #2
0
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;
}
Example #3
0
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
}
Example #4
0
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
}