Ich schreibe ein kleines Programm mit QT Creator unter Windows 7 (32 Bit). Mein Ziel ist es, einen Windows-Schlüssel zu erstellen.
Ich benutze
QSettings settings("HKEY_CURRENT_USER\Software\Company", QSettings::NativeFormat);
settings.setValue("C:\path\prog.exe", "Value");
In der Windows-Registrierung hat der generierte Schlüssel jedoch den Wert C: /path/prog.exe Ich habe versucht, es mit zu konvertieren
qDebug() << QDir::toNativeSeparators("C:\path\prog.exe");
Die Ausgabe von qDebug () ist richtig c: pathprog.exe aber tun
settings.setValue(QDir::toNativeSeparators("C:\path\prog.exe"), "Value");
führt wieder zu einem Pfad mit einem falschen Schrägstrich. gibt es eine Möglichkeit, den Pfad in der Windows-Registrierung korrekt zu schreiben, ohne die Windows-API zu verwenden?
Vielen Dank Francesco
Antworten:
1 für die Antwort № 1Sie können dies auch mit WinAPI nicht tun. Weil Sie einen ungültigen Schlüssel angeben. Sie sollten das verstehen QSettings
Da die Klasse ein plattformspezifisches Backend verwendet, ist es nützlich, die Dokumentation zu lesen, wenn etwas nicht wie erwartet funktioniert. Fang hier an.
QSettings
Klasse führt eine benutzerdefinierte Umwandlung in Schlüssel und durchWerte, so können Sie dort beliebige QVariant-Werte speichern. Sogar Arrays. Ungültige Werte für jede Plattform werden geschützt. Sie können genaue Transformationsregeln in Qt-Quellen betrachten.
Hinweis: Die Umwandlung der Werte hängt vom Typ der Einstellungsspeicher ab. Zum Beispiel ^ für .ini-Dateien.
-1 für die Antwort № 2
ok, ich habe es geschafft, mein Ziel zu erreichen
RegSetValueEx(hkey, TEXT("C:\path\prog.exe"), 0, REG_SZ, (LPBYTE)TEXT("WIN98"), 6 * sizeof(WCHAR));
für eine konstante Zeichenfolge.
Wenn der Programmpfad in einem Zeichen * gespeichert ist (wie in meinem Fall), funktioniert es mit
char* exe_name = /*something*/
wchar_t* wString=new wchar_t[4096];
MultiByteToWideChar(CP_ACP, 0, exe_name, -1, wString, 4096);
RegCreateKeyEx( .......... )
RegSetValueEx(hkey, (LPCWSTR) wString, 0, REG_SZ, (LPBYTE)TEXT("WIN98"), 6 * sizeof(WCHAR));
Francesco