/ / C'è un problema nell'utilizzo dei backslash nei nomi delle chiavi di registro? - windows, qt, registry, backslash

C'è un problema con l'utilizzo di barre rovesciate nei nomi delle chiavi di registro? - windows, qt, registry, backslash

Sto scrivendo un piccolo programma con QT creator sotto Windows 7 (32 bit). Il mio obiettivo è creare un tasto Windows.

Sto usando

QSettings settings("HKEY_CURRENT_USER\Software\Company", QSettings::NativeFormat);
settings.setValue("C:\path\prog.exe", "Value");

ma nel registro di Windows la chiave generata ha il valore C: /path/prog.exe Ho provato a convertirlo con

qDebug() << QDir::toNativeSeparators("C:\path\prog.exe");

l'output di qDebug () è corretto c: pathprog.exe ma facendo

settings.setValue(QDir::toNativeSeparators("C:\path\prog.exe"), "Value");

risultati di nuovo in un percorso con una barra sbagliata. c'è un modo per scrivere correttamente il percorso nel registro di Windows senza usare l'API di Windows?

Grazie Francesco

risposte:

1 per risposta № 1

Non puoi farlo anche con WinAPI, perché stai specificando una chiave non valida. Dovresti capirlo QSettings classe utilizzare back-end specifico per piattaforma, quindi è utile leggere la documentazione, se qualcosa non funziona come previsto. Comincià qui.

QSettings class esegue la trasformazione personalizzata su chiavi evalori, quindi è possibile memorizzare tutti i valori QVariant lì. Anche array. I valori non validi per ciascuna piattaforma verranno sfuggiti. Puoi guardare le regole di trasformazione esatte nelle fonti Qt.

Nota: la trasformazione dei valori dipende dal tipo di memorizzazione delle impostazioni. Ad esempio ^ per i file .ini.


-1 per risposta № 2

ok, sono riuscito a raggiungere il mio obiettivo usando

    RegSetValueEx(hkey, TEXT("C:\path\prog.exe"), 0, REG_SZ, (LPBYTE)TEXT("WIN98"), 6 * sizeof(WCHAR));

per una stringa costante.

nel caso in cui il percorso del programma è strored in un char * (come nel mio caso), funziona con

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