HWND_BROADCAST的一个用法——修改环境变量,立即通知系统

在编程时遇到一个问题: 
就是程序通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【OK】后,才能生效。
后来用Spy++工具捕获消息,发现在点击【OK】按钮时,发送了WM_SETTINGCHANGE消息。

在网上查找原因时发现,修改了注册表之后,系统需要重启,或者向上述操作,系统才能知道注册表被修改了,之后才能生效。
如果想修改完环境变量后,立即生效,需要向系统发送消息:

 wstring szParam = _T( "Environment" );
 ::SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)szParam.c_str() );

消息的第二个参数必须是_T( "Environment" )字符串,代表是环境变量发生了改变。

测试的方法:
第一步:
修改注册表:HKEY_CURRENT_USER//Environment下的TMP值改成“F:”
然后在文件夹上面的地址栏输入%TMP%,没有响应。
按照文章开始时叙述的方法执行后,在输入%TMP%,果然生效,系统的临时文件夹改为F:了。

第二步:
修改注册表:将HKEY_CURRENT_USER//Environment下的TMP值改回原来的值,
然后发送WM_SETTINGCHANGE消息,
在文件夹的地址栏上输入%TMP%, 立即生效了。

这里WM_SETTINGCHANGE的第二个参数用"Environment"字符串,这是表明是环境变量发生了改变。如果是活动桌面改变了,这个消息的第二个参数就是别的字符串。

原文地址:http://blog.csdn.net/primer_programer/article/details/2232777

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统,布布扣,bubuko.com

时间: 2024-08-05 23:18:04

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统的相关文章

InstallShield修改环境变量后不能立即生效的问题

创建一个InstallScript脚本的InstallShield安装程序,在脚本代码中更新环境变量,更新后发现注册表和计算机->属性->高级->环境变量中的变量值都更新了,但是使用命令行(WIN+R,CMD)始终获取不到设置的环境变量. 出现这个问题的原因是脚本代码中更新环境变量时没有给windows系统发送更新的通知事件.虽然网上有很多该问题的解决办法,但是我做了很多遍都不正确.最后在InstallShield自带的帮助文档中(搜索"Environment Variable

变量的声明及其作用域、脚本、修改环境变量$PATH【:VALUE】

变量的声明及其作用域 本地变量 VARNAME=VALUE:作用域为整个bash进程[打开新的shell进程,没有该变量] [root@jiakang a]# A=123 [root@jiakang a]# bash [root@jiakang a]# echo $A [root@jiakang a]# 局部变量 local VARNAME=VALUE:作用域为当前代码段 环境变量 作用域为当前shell及其子进程[打开一个shell就是一个进程] export VARNAME=VALUE或者

Linux系统下修改环境变量PATH路径的三种方法

比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格) 这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变 3.#vi ~/.bash_profile 修改PATH行,把/et

win系统环境变量中增加或修改环境变量后快速生效

win系统环境变量中增加或修改环境变量后,需重启系统才能使之生效. 下面介绍一种方法: 以修改环境变量"PATH"为例,修改完成后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口.再次打开DOS窗口,输入:echo %PATH% ,值已经生效. 不用担心DOS窗口中的修改会影响环境变量的值,DOS窗口中的环境变量只是Windows环境变量的一个副本而已.但是对副本的修改却会引发Windows环境变量的刷新,这正是我们想要的!

安装交叉编译工具arm-linux-gcc-4.3.2 并且修改环境变量

安装交叉编译工具arm-linux-gcc-4.3.2 2011-07-08 00:55:28|  分类: 嵌入式|举报|字号 订阅 环境:Fedora 9 STEP 1: 下载arm-linux-gcc-4.3.2.tgz. 把arm-linux-gcc-4.3.2.tgz随便放在一个目录,我放在了/opt.下载网站1:http://www.arm123.com.cn/linux/arm-linux-gcc-4.3.2.tgz             下载网站2:http://www.arm9

批处理,修改环境变量path的方法(加环境变量)

方法一:批处理中,修改环境变量,一次性有效(也就是在当前的脚本中有效) CMD中运行 set path==%path%;d:/mypath 用 set path可以查看,当前的环境变量 方法二 :批处理中,修改环境变量,永久有效 ::更改path环境变量值,新增e:\toolswmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools

【转】windows7 修改环境变量 和 用不用重启电脑的讨论

  原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html   先到我的电脑>属性>高级>环境变量,添加新环境变量或修改已有的环境变量,然后运行"DOS命令提示符"或run cmd,假设要修改PATH变量,不管PATH的原值是什么,在DOS窗口直接把PATH修改为任意值,关闭DOS窗口,这时,我的电脑>属性>高级>环境变量里PATH已经在Windows全局生效了. 不

Linux有问必答:如何在Linux中修改环境变量PATH

提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以不用指定路径来运行这个命令了. 在Linux中,PATH环境变量保存了一系列的目录用于用户在输入的时候搜索命令.PATH变量的值由一系列的由分号分隔的绝对路径组成.每个用户都有特定的PATH环境变量(由系统级的PATH变量初始化). 要检查用户的环境变量,用户模式下运行下面的命令: $ echo $

Linux下修改环境变量

首先来看修改环境变量的位置,我们可以在那些地方修改环境变量? 1. /etc/profile:对所有用户生效:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行:并从/etc/profile.d目录的配置文件中搜集shell的设置 2. /etc/bashrc:对所有用户生效:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取 3. /etc/enviroment:是系统的环境变量,与登录用户无关 4. ~/.bash_profile