如何使用 QT 4.8 获取和设置 PATH 变量?我知道我可以使用 getenv 从 STL 获取 PATH 变量值,但不知道如何使用 STL 或任何基于 Qt 的方法设置它?
如果 QT 有它的功能,我想知道并使用它,而不是去使用它的 Windows API。
如何使用 QT 4.8 获取和设置 PATH 变量?我知道我可以使用 getenv 从 STL 获取 PATH 变量值,但不知道如何使用 STL 或任何基于 Qt 的方法设置它?
如果 QT 有它的功能,我想知道并使用它,而不是去使用它的 Windows API。
感谢我的朋友 Toosi 先生,您可以为当前进程设置环境变量 usingqputenv("key", "value")
并使用qgetenv("key")
.
这也适用于 Qt 5.5.0 :)
您可以使用 stdlib.h 中的 setenv 将 PATH 设置为新值。
setenv("PATH","/new/path/value",1)
然而,这是对标准头文件的非标准扩展,只会影响调用进程产生的子进程。为了更改所有新进程的环境变量,必须使用系统特定的方法。对于 Windows,PATH 变量可以在
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
注册表项。这将确保为所有新进程设置 PATH,并将在重新启动时应用。
我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
应用程序,然后在其中发送此消息。
但是这个函数应该在注册表更改后立即调用。所以我可以手动编辑注册表值,然后按下一个调用SendMessageA
和Path
更新的按钮。
顺便说一句,有一个SendMessage
宏调用SenMessageW
函数,但它没有工作并且Path
没有改变。不知道是什么A
意思,但它改变了变量。