Я пишу невелику програму з творцем 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));
Франческо