5

如何使用 QT 4.8 获取和设置 PATH 变量?我知道我可以使用 getenv 从 STL 获取 PATH 变量值,但不知道如何使用 STL 或任何基于 Qt 的方法设置它?

如果 QT 有它的功能,我想知道并使用它,而不是去使用它的 Windows API。

4

3 回答 3

12

感谢我的朋友 Toosi 先生,您可以为当前进程设置环境变量 usingqputenv("key", "value")并使用qgetenv("key").
这也适用于 Qt 5.5.0 :)

于 2015-08-15T06:33:36.003 回答
3

您可以使用 stdlib.h 中的 setenv 将 PATH 设置为新值。

setenv("PATH","/new/path/value",1)

然而,这是对标准头文件的非标准扩展,只会影响调用进程产生的子进程。为了更改所有新进程的环境变量,必须使用系统特定的方法。对于 Windows,PATH 变量可以在

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment

注册表项。这将确保为所有新进程设置 PATH,并将在重新启动时应用。

于 2013-07-05T14:54:58.333 回答
2

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从这个答案中首先意识到如何使用:
如何通过 Windows 中的命令行明确地修改 PATH 变量我想我应该在Visual Studio
中 创建一个Win32应用程序,然后在其中发送此消息。

但是这个函数应该在注册表更改后立即调用。所以我可以手动编辑注册表值,然后按下一个调用SendMessageAPath更新的按钮。


顺便说一句,有一个SendMessage宏调用SenMessageW函数,但它没有工作并且Path没有改变。不知道是什么A意思,但它改变了变量。

于 2015-06-06T13:57:05.747 回答