Seite 1 von 1

Lesender Zugriff auf Windows Registry [gelöst]

Verfasst: 9. Mai 2012 19:31
von Doc_symbiosis
Hallo,

ich habe ein Programm, welches folgendermaßen auf die Registry zugreift:

Code: Alles auswählen

        
QSettings gnuPGsettings("HKEY_CURRENT_USER\\Software\\GNU\\GNUPG", QSettings::NativeFormat);
gnuPGHome = gnuPGsettings.value("HomeDir").toString();
Klappt soweit auch super. Allerdings soll die Anwendung portabel sein und somit keine Schlüssel in der Registry anlegen. Problem ist, dass durch die erste dieser beiden Zeilen der Schlüssel angelegt wird, sofern er nicht existiert.

Weiss jemand, wie man rein lesenden Zugriff mit QSettings hinbekommt oder eine andere Qt-Methode, wie man einen Registry-Key ausliest? Ich habe schon echt lange gesucht, bin aber leider nicht fündig geworden...

Danke schonmal für etwaige antworten.

Re: Lesender Zugriff auf Windows Registry

Verfasst: 10. Mai 2012 09:03
von brax
Versuch mal mit QSettings::contains(const QString& key) vorher abzufragen, ob der Key existiert. Ist keine statische Methode, wirst Dir also wohl erstmal ein "leeres" QSettings Objekt bauen müssen und damit die Abfrage machen.

Re: Lesender Zugriff auf Windows Registry

Verfasst: 15. Juli 2012 00:55
von Doc_symbiosis
Hallo,

habe das Problem nun folgendermaßen gelöst:
Am Anfang der Klasse:

Code: Alles auswählen

#ifdef Q_OS_WIN
#include "windows.h"
#endif
In der eigentlichen Funktion dann folgendes verwendet

Code: Alles auswählen

    bool existsAndSuccess = false;

    HKEY hKey;

    existsAndSuccess = (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\GNU\\GNUPG", 0, KEY_READ, &hKey) == ERROR_SUCCESS);

    if (existsAndSuccess) {
        QSettings gnuPGsettings("HKEY_CURRENT_USER\\Software\\GNU\\GNUPG", QSettings::NativeFormat);
            if (gnuPGsettings.contains("HomeDir")) {
                gnuPGHome = gnuPGsettings.value("HomeDir").toString();
            } else {
                return NULL;
            }
        }