如果实现修改了注册表,不需要重起,立即更新?(50分)

薄荷

Unregistered / Unconfirmed
GUEST, unregistred user!
我修改了注册表的输入法排序,不过要重起才能实现,
怎么才能够实现不要重起呢?
systemParamInfo()那个函数好像只能对desktop有效,对输入法没效吧。
我知道兔子魔法设置可以实现。

我不想用注销,这样开着的程序要关掉。
 
帮你UP
 
既然改了注册表,就让window知道注册表改啦!
SystemParametersInfo里有个参数是通知系统注册表更改的!
fWinIni

If a system parameter is being set, specifies whether the user profile is to be updated, and if so,
whether the WM_SETTINGCHANGE message is to be broadcast to all top-level windows to notify them of the change.
This parameter can be zero or can be one of the following values:

Value Action
SPIF_UPDATEINIFILE Writes the new system-wide parameter setting to the user profile.
SPIF_SENDCHANGE Broadcasts the WM_SETTINGCHANGE message after updating the user profile.
SPIF_SENDWININICHANGE Same as SPIF_SENDCHANGE.

一般来说,你需要在修改注册表后广播发送WM_SETTINGCHANGE消息(在Windows NT下为WM_WININICHANGE消息)。
如果使用SystemParametersInfo修改系统设置,最后一个参数应设置为SPIF_SENDWININICHANGE。
这样,有关程序接收到该消息采取相应的操作

 
有的情况,不重新启动是不行的。
特别是设备驱动必须在 shell 装入前装入。必须重新启动。
 
同意jsxjd!
 
关闭explorer进程,并重新运行
 
to yaya8163:
你的方法该是最正规的方法了,不过我用了
SendMessage(HWND_BroadCast,WM_SETTINGCHANGE,0,lparam(pchar('我改过的key')));
怎么没有效果呢。
其实我改的是输入法的顺序,想不要重起就实现。
key是在 CU/software/keyborad layout/preload/

to Naughtboy: 这个方法,我觉得不好,我打开的文件夹岂不是都关了?
 
试试这个
SendMessage(FindWindow('Progman', 'Program Manager'), WM_COMMAND, 106597,
0);
相当于按F5刷新桌面,同时刷新注册表
 
我试试看
 
这个问题我搞定了,用的是Loadkeyboardlayout()
反汇编了控制面板里的输入法(main.cpl)和internat.exe才发现的。
 
顶部