::::::救命!::::::::::如何修改了注册表的内容,立即生效. 难道没有高手!:::::救命!:::::::::::::::::; (50分)

I

idreamc

Unregistered / Unconfirmed
GUEST, unregistred user!
在对 >文件夹选项< 内容的修改进行跟踪后.
使用程序对注册表内容进行修改但无法立即生效.

注意:已经使用以下方法无效,如果哪位高手能够成功请告知方法谢谢!
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0);
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
SHChangeNotify(SHCNE_ALLEVENTS,SHCNF_FLUSH,nil,nil);

修改的内容-在标题栏显示完整路径
位置:HKEY_CURRENT_USER
选中时:
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/FullPath: 0x00000001
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/Settings: 0C 00 02 00 0B 01 E5 77 60 00 00 00
未选中时:
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/FullPath: 0x00000000
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/Settings: 0C 00 02 00 0A 01 E5 77 60 00 00 00
终止Explorer.exe后重新运行 则有效.说明修改的数据是正确的.但是即时刷新无效.


 
有些东西是要windows重启后加载才可以的呀!
如果能做到注册表被windows重新加载的话,那就能办到了!
不过如果把explorere.exe杀掉,再启动的话,那也太没有人道了。
好像也不太可能,我不懂,学习!
 
to chatop
这个肯定不需要重新启动,因为在使用Windows提供的文件夹选项修改的时候不需要启动.
 
你可以兼测一下在资源管理器里边修改设置完成后,它发出了什么消息。
 
试试:
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(PChar('WINDOWS')));
或是:
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(nil));
 
to tanglu
我用Spy跟踪 应用/确定 按钮,发送的消息有WM_SETTINGCHANGE和一些绘图和鼠标的消息.
用自己的程序发送后无效.
 
to yaya8163,
测试了无效.
 
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,PCHAR('Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/'));
 
to windbell
那句代码有问题
测试
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,DWORD(PCHAR('Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/')));
无效.
 
傻瓜!
有些设置以后不需要重新启动是因为要用到这些设置值的时候实时地去读注册表的有关信息!
而有些只在系统启动的时候一次性读入!
BillGates喜欢这样,我们也没什么办法了,要不我们自己写一个不需要重新启动的操作系统?
 
to masm
首先我不傻,为什么使用 Windows提供的 >文件夹选项< 修改的时候不需要启动就立即生效.
 
呵 !呵!
 
还得学呀
 
对了,windows里面装了新硬件不重启的话是不是会经过自身的编译阿
 
"在使用Windows提供的文件夹选项修改的时候不需要启动"
这个是当然了,explorer先把修改的效果显示出来,才修改的注册表保存
修改数据的,这个是不需要通知的,因为就写在程序中。
你要动态跟踪explorer到“修改的效果显示出来”这段代码,然后想办法调用,
我觉得很可能在某个dll中。
 
to masm
首先我不傻,为什么使用 Windows提供的 >文件夹选项< 修改的时候不需要启动就立即生效.

不能单靠这一点,难道不能是直接改变,而不是重新读取注册表.
 
to xusong168,wab
我的做法是这样的
1.首先用Win提供的修改为 在标题栏显示完整路 处于选中状态.
2.然后打开N个浏览文件夹窗口,此时标题栏的能够显示完整的路径。
3.用Win提供的修改为 在标题栏显示完整路 处于未选中状态.
注意:会发现所有的浏览文件夹窗口全部 显示的不是完整的路径。
4.用Regedit.exe 修改数据
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/FullPath: 0x00000001
Software/Microsoft/Windows/CurrentVersion/Explorer/CabinetState/Settings: 0C 00 02 00 0B 01 E5 77 60 00 00 00
5.打开>文件夹选项< 发现 在标题栏显示完整路 处于选中状态.
但是 在标题栏显示不是完整的路径。
6.用 Win修改时, 很显然使用了消息。
跟踪浏览窗口,发现窗口接受到几个自定义消息。但自己发送无效。
 
试试
BroadcastSystemMessage(BSF_FLUSHDISK, nil, WM_WININICHANGE, 0, 0);

MSDN:

An application sends the WM_WININICHANGE message to all top-level windows
after making a change to the WIN.INI file. The SystemParametersInfo function
sends this message after an application uses the function to change a setting in
WIN.INI.
~~~~~~~~~
 
to cqbaobao 无效
 
顶部