C++ 有没有一种方法可以在C++;在窗户上?

C++ 有没有一种方法可以在C++;在窗户上?,c++,winapi,path,environment-variables,C++,Winapi,Path,Environment Variables,是否有方法以编程方式(C++)设置全局windows path环境变量? 据我所知,putenv仅为当前应用程序设置它。 直接在注册表中更改(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)也是一个选项,尽管如果有API方法,我更喜欢它?没有API-更改注册表是一种方法。更改后的值将用于更改后开始的进程 另外:请注意,正在运行的应用程序必须主动处理设置更改消息,而许多(大多数?)应用程序不这样做 如果您想通过注册

是否有方法以编程方式(C++)设置全局windows path环境变量?

据我所知,putenv仅为当前应用程序设置它。

直接在注册表中更改
(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
也是一个选项,尽管如果有API方法,我更喜欢它?

没有API-更改注册表是一种方法。更改后的值将用于更改后开始的进程


另外:请注意,正在运行的应用程序必须主动处理设置更改消息,而许多(大多数?)应用程序不这样做

如果您想通过注册表执行此操作,您可能需要查看程序的源代码

Microsoft还提供了一个名为setx的小型命令行实用程序,它可以让您执行此操作。顺便说一句,我认为常规set命令只允许您定义本地环境变量。

MSDN:

调用SetEnvironmentVariable没有 对系统环境的影响 变量以编程方式添加或 修改系统环境变量, 将它们添加到 HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Control\Session 管理器\环境注册表项,然后 广播WM_设置更改消息 将lParam设置为字符串 “环境”。这允许 应用程序(如shell)可以 拿起你的更新。请注意 环境变量的值 此密钥中列出的限制为1024 人物

是的,你是对的。 您还需要在不注销的情况下影响这些设置

使用SendMessageTimeout API,使用SMTO_abortfhung向所有windows设置更改参数(LPARAM)“Environment”发送borad casting消息数毫秒(5000)


这是随资源工具包提供的setX.exe所做的。

如前所述,要在计算机级别更改路径,只需更改此注册表项:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
但您也可以通过更改此注册表项在用户级别设置路径:

HKEY_CURRENT_USER\Environment\Path
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
您还可以通过将application\PATH详细信息添加到此注册表项,在应用程序级别设置路径:

HKEY_CURRENT_USER\Environment\Path
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
需要注意的是,“Environment”字符串是UTF16格式的,所以您应该使用
L
前缀。示例代码:
SendMessageTimeout(HWND_广播,WM_设置更改,0,(LPRAM)L“环境”,SMTO_abortfhung,5000,NULL)