如何使用QT 4.8获取和设置PATH变量?我知道我可以使用STL中的getenv获取PATH变量值但是不知道如何使用STL或任何基于Qt的方法设置它?
如果QT有它的功能,我想知道并使用它,而不是去使用Windows API。
答案 0 :(得分:9)
感谢我的朋友Toosi先生,您可以使用qputenv("key", "value")
为当前流程设置环境变量,并使用qgetenv("key")
获取。
这也适用于Qt 5.5.0:)
答案 1 :(得分:3)
您可以使用stdlib.h中的setenv将PATH设置为新值。
setenv("PATH","/new/path/value",1)
但是,这是标准标头的非标准扩展,只会影响调用进程生成的子进程。为了更改所有生成的新进程的环境变量,必须使用特定于系统的方法。对于Windows,可以在
中更改PATH变量HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
注册表项。这将确保为所有新进程设置PATH,并将在重新启动时应用。
答案 2 :(得分: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
:
How to modify the PATH variable definitely through the command line in Windows。
我想我应该在 Visual Studio 中创建一个Win32
应用,然后在其中发送此消息。
但是在注册表更改后应该调用此函数。因此,我可以手动编辑注册表值,然后按一个调用SendMessageA
和Path
更新的按钮。
SendMessage
宏调用SenMessageW
功能,但它没有工作且Path
没有改变。不知道A
意味着什么,但它会改变变量。