/ / Existe um problema com o uso de barras invertidas nos nomes das chaves do Registro? - windows, qt, registro, barra invertida

Existe um problema com o uso de barras invertidas nos nomes das chaves do Registro? - janelas, qt, registro, barra invertida

Estou escrevendo um pequeno programa com o QT Creator no Windows 7 (32 bits). Meu objetivo é criar uma chave do Windows.

Estou a usar

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

mas no registro do Windows, a chave gerada tem o valor C: /path/prog.exe Eu tentei convertê-lo com

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

a saída de qDebug () está correta c: pathprog.exe mas fazendo

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

resulta novamente em um caminho com uma barra incorreta. existe uma maneira de escrever corretamente o caminho no registro do Windows sem usar a API do Windows?

obrigado Francesco

Respostas:

1 para resposta № 1

Você não pode fazer isso mesmo com o WinAPI. Como está especificando uma chave inválida. Você deve entender que QSettings A classe usa back-end específico da plataforma; portanto, é útil ler a documentação, se algo não funcionar conforme o esperado. Começa aqui.

QSettings A classe executa transformação personalizada em chaves evalores, para que você possa armazenar quaisquer valores QVariant lá. Mesmo matrizes. Valores inválidos para cada plataforma serão escapados. Você pode observar as regras exatas de transformação nas fontes Qt.

Nota: a transformação de valores depende do tipo de armazenamento de configurações. Por exemplo ^ para arquivos .ini.


-1 para resposta № 2

ok, eu consegui alcançar meu objetivo usando

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

para uma cadeia constante.

caso o caminho do programa seja inserido em um caractere * (como no meu caso), ele funcionará com

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