QList<ApplicationInformation> WindowsPlatformIntegration::getApplicationsForMimeType(const QMimeType &mimeType) { QList<ApplicationInformation> applications; const QString suffix(mimeType.preferredSuffix()); if (suffix.isEmpty()) { Console::addMessage(tr("No valid suffix for given MIME type: %1").arg(mimeType.name()), OtherMessageCategory, ErrorMessageLevel); return QList<ApplicationInformation>(); } if (suffix == QLatin1String("exe")) { return QList<ApplicationInformation>(); } if (m_cleanupTimer != 0) { killTimer(m_cleanupTimer); m_cleanupTimer = 0; } if (m_environment.isEmpty()) { m_environment = QProcessEnvironment::systemEnvironment(); } // Vista+ applications const QSettings defaultAssociation(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.") + suffix, QSettings::NativeFormat); QString defaultApplication(defaultAssociation.value(QLatin1String("."), QString()).toString()); QStringList associations; if (defaultApplication.isEmpty()) { const QSettings defaultAssociation(QLatin1String("HKEY_LOCAL_MACHINE\\Software\\Classes\\.") + suffix, QSettings::NativeFormat); defaultApplication = defaultAssociation.value(QLatin1String("."), QString()).toString(); } if (!defaultApplication.isEmpty()) { associations.append(defaultApplication); } const QSettings modernAssociations(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.") + suffix + QLatin1String("\\OpenWithProgids"), QSettings::NativeFormat); associations.append(modernAssociations.childKeys()); associations.removeAt(associations.indexOf(QLatin1String("."))); associations.removeDuplicates(); for (int i = 0; i < associations.count(); ++i) { const QString value(associations.at(i)); if (m_registrationIdentifier == value) { continue; } ApplicationInformation information; const QSettings applicationPath(QLatin1String("HKEY_LOCAL_MACHINE\\Software\\Classes\\") + value + QLatin1String("\\shell\\open\\command"), QSettings::NativeFormat); information.command = applicationPath.value(QLatin1String("."), QString()).toString().remove(QLatin1Char('"')); if (information.command.contains(QLatin1String("explorer.exe"), Qt::CaseInsensitive)) { information.command = information.command.left(information.command.indexOf(QLatin1String(".exe"), 0, Qt::CaseInsensitive) + 4); information.command += " %1"; } if (information.command.isEmpty()) { Console::addMessage(tr("Failed to load a valid application path for MIME type %1: %2").arg(suffix).arg(value), OtherMessageCategory, ErrorMessageLevel); continue; } getApplicationInformation(information); applications.append(information); } // Win XP applications const QSettings legacyAssociations(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.") + suffix + QLatin1String("\\OpenWithList"), QSettings::NativeFormat); const QString order(legacyAssociations.value(QLatin1String("MRUList"), QString()).toString()); const QString applicationFileName(QFileInfo(QCoreApplication::applicationFilePath()).fileName()); associations = legacyAssociations.childKeys(); associations.removeAt(associations.indexOf(QLatin1String("MRUList"))); for (int i = 0; i < associations.count(); ++i) { ApplicationInformation information; const QString value(legacyAssociations.value(order.at(i)).toString()); if (applicationFileName == value) { continue; } const QSettings applicationPath(QLatin1String("HKEY_CURRENT_USER\\SOFTWARE\\Classes\\Applications\\") + value + QLatin1String("\\shell\\open\\command"), QSettings::NativeFormat); information.command = applicationPath.value(QLatin1String("."), QString()).toString().remove(QLatin1Char('"')); if (information.command.isEmpty()) { const QSettings applicationPath(QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Applications\\") + value + QLatin1String("\\shell\\open\\command"), QSettings::NativeFormat); information.command = applicationPath.value(QLatin1String("."), QString()).toString().remove(QLatin1Char('"')); if (information.command.isEmpty()) { const QSettings applicationPath(QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\") + value, QSettings::NativeFormat); information.command = applicationPath.value(QLatin1String("."), QString()).toString(); if (!information.command.isEmpty()) { information.command.append(QLatin1String(" %1")); } else { Console::addMessage(tr("Failed to load a valid application path for MIME type %1: %2").arg(suffix).arg(value), OtherMessageCategory, ErrorMessageLevel); continue; } } } getApplicationInformation(information); bool exclude(false); for (int j = 0; j < applications.count(); ++j) { if (applications.at(j).name == information.name) { exclude = true; break; } } if (!exclude) { applications.append(information); } } m_cleanupTimer = startTimer(5 * 60000); return applications; }
com::typesafe::config::Config* com::typesafe::config::ConfigFactory::defaultApplication() { clinit(); return defaultApplication(ConfigParseOptions::defaults()); }
com::typesafe::config::Config* com::typesafe::config::ConfigFactory::defaultApplication(::java::lang::ClassLoader* loader) { clinit(); return defaultApplication(npc(ConfigParseOptions::defaults())->setClassLoader(loader)); }
com::typesafe::config::Config* com::typesafe::config::ConfigFactory::load(ConfigParseOptions* parseOptions, ConfigResolveOptions* resolveOptions) { clinit(); auto const withLoader = ensureClassLoader(parseOptions, u"load"_j); return load(defaultApplication(withLoader), resolveOptions); }