Я работал со значением Registry
с помощью этого кода:
включают:
#include <windows.h>
Для чтения:
QSettings setting("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", QSettings::NativeFormat);
QString pathVal = setting.value("Path", "no-path").toString();
Чтобы написать:
setting.setValue("Path", path);
SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
Таким образом, я получаю фактическое значение Path
без перезагрузки программы и записываю значение, передающее изменение всем процессам.
Не знаю, как использовать SendMessage
от этого ответа:
How to modify the PATH variable definitely through the command line in Windows.
Я думал, что должен создать приложение Win32
в Visual Studio, а затем отправить это сообщение внутри него.
Но эту функцию следует вызывать сразу после изменения реестра. Поэтому я могу вручную отредактировать значение реестра, а затем нажать кнопку, которая называется SendMessageA
и обновлена Path
.
Кстати, есть SendMessage
макрос, который вызывает SenMessageW
функцию, но она не работает и Path
не изменилась. Не знаю, что означает A
, но он меняет переменную.
Спасибо большое :) Я не знал, что у нас есть setenv в STL !. Но знаете ли вы, если у нас есть что-то, на чем основывается Qt? если есть что-то вроде этого, я принимаю его как ответ. – Breeze
Кажется, что вы можете использовать [QProcessEnviroment] (http://qt-project.org/doc/qt-4.8/qprocessenvironment.html), чтобы установить среду процессов, порожденных с помощью [QProcess] (http://qt-project.org/doc/qt-4.8/qprocess.html). – exrook
Спасибо, мне нужно разрешение машины (я имею в виду, что касается всей ОС, а не самого процесса), все равно мне все равно придется идти? – Breeze