/ / Чи є проблема із застосуванням зворотних косих рисок у назвах ключових реєстрів? - windows, qt, реєстр, зворотний кут

Чи існує проблема з використанням зворотних косих рис у іменах реєстру? - windows, qt, registry, backslash

Я пишу невелику програму з творцем QT під Windows 7 (32 біт). Моя мета - створити ключ Windows.

Я використовую

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

але в реєстрі Windows згенерований ключ має значення C: /path/prog.exe Я намагався його перетворити

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

вихід qDebug () правильний c: pathprog.exe але робити

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

знову призводить до шляху з неправильною косою рисою. чи є спосіб правильно записати шлях у реєстр Windows, не використовуючи API Windows?

Дякую Франческо

Відповіді:

1 для відповіді № 1

Ви не можете це зробити навіть з WinAPI. Оскільки ви вказуєте недійсний ключ. Ви повинні це зрозуміти QSettings Клас використовує специфічний для платформи бекенд, тому корисно читати документацію, якщо щось не працює, як очікувалося. Починай тут.

QSettings клас виконує спеціальне перетворення на ключі тазначень, тож ви можете зберігати там будь-які значення QVariant. Навіть масиви. Недійсні значення для кожної платформи будуть уникнуті. Ви можете переглянути точні правила перетворення у джерелах Qt.

Примітка: Перетворення значень залежить від типу зберігання параметрів. Наприклад ^ для .ini файлів.


-1 для відповіді № 2

добре, мені вдалося досягти своєї мети, використовуючи

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

для постійної струни.

у випадку, якщо шлях програми прокреслений символом * (як у моєму випадку), він працює

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));

Франческо