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 № 1Non 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