有关键盘布局的信息存储在 Windows 上的键盘布局 DLL 中。可以使用 Microsoft Keyboard Layout Creator (http://msdn.microsoft.com/en-us/goglobal/bb964665.aspx)。它创建动态库和安装程序,安装程序将 DLL 放置在正确的位置,并将必要的信息放入注册表,以便可以使用布局。
现在我的问题是:如何更新自定义布局?可以卸载布局并安装新版本,这样可以有效替换 DLL 文件。但是,仅此方法不起作用,因为似乎 DLL 的旧副本仍加载在某处,并在设置布局时使用,而不是加载新版本。那么有没有办法告诉系统其“键盘布局缓存”无效?当然,我可以重新启动整个系统,但我想避免这样做,因为只是为了重新加载 DLL 而重新启动整个系统很烦人,而且似乎设计不佳。
答案1
存在一种强制卸载未使用的 DLL 的机制,主要用于调试 shell 扩展。
来自文章使用 Shell 进行调试:
当 DLL 的使用计数为零时,Shell 会自动卸载该 DLL,但前提是该 DLL 一段时间内未使用。有时,此不活动期可能长得令人无法接受,尤其是在调试 Shell 扩展 DLL 时。您可以通过将以下信息添加到注册表来缩短不活动期。
- 打开注册表编辑器(开始 -> 运行 -> Regedit)
- 滚动至:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
- 单击编辑 -> 新建,然后单击 DWORD 值
- 创建名为
AlwaysUnloadDll
- 右键单击该值,然后选择编辑
- 将数值数据设置为 1,然后单击“确定”。
- 关闭注册表编辑器并重新启动计算机。
- 现在,未使用的 DLL 将在程序关闭时被删除。
使用此设置始终运行可能会降低计算机的速度,因为 Windows 会在程序运行时不断加载和卸载相同的 DLL。建议仅在编辑字体时使用它。
另外要说的是,我不知道此设置是否也适用于字体 DLL。您必须进行实验才能知道。