我们知道在注册表HKEY_CURRENT_USER\keyboard layout\preload下有子键1、2、3、4、5(这就是输入法的顺序),每个子键的缺省键值即为标识该输入法的串值,如串值00000409对应的是英文输入法,串值E0040804对应的是智能ABC输入法。
如果想知道每一个串值对应什么输入法,我们可以在HKEY_lOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts之下找到。知道了输入法的存放位置及顺序关系后,我们可以利用程序操作注册表把代表输入法顺序的串值进行相应移动,即可实现我们的目的了。
但是还有一个问题就是只修改了子键1为00000409对应的是英文输入法,那么剩下来2或者3中的肯定有一个也为英文。这样就会冲突。所以需要做的就是将原来为英文的子键和子键1里面原来的值交换。这样就不会出现问题了。
Set WshShell = CreateObject("WScript.Shell")
n = 1
'系统的默认的输入法
lovalue = WshShell.RegRead("HKEY_CURRENT_USER\Keyboard Layout\Preload\1")
'path = "HKEY_USERS\.DEFAULT\Keyboard Layout\Preload" 这个是当前设置的输入法路径
'path2 = "HKEY_CURRENT_USER\Keyboard Layout\Preload" 这个是系统默认输入法路径
If lovalue <> "00000409"Then
Do while (preloadn <> "00000409" and n < 10)
On error resume next
n=n+1
preloadn = WshShell.RegRead("HKEY_CURRENT_USER\Keyboard Layout\Preload"&"\"&n)
Loop
WshShell.RegWrite "HKEY_CURRENT_USER\Keyboard Layout\Preload\temp", preloadn, "REG_SZ"
Tempcache =WshShell.RegRead("HKEY_CURRENT_USER\Keyboard Layout\Preload\temp")
lnvalue = WshShell.RegWrite ("HKEY_CURRENT_USER\Keyboard Layout\Preload"&"\"&n, lovalue, "REG_SZ")
lovalue = WshShell.RegWrite ("HKEY_CURRENT_USER\Keyboard Layout\Preload\1", Tempcache, "REG_SZ")
WshShell.RegDelete ("HKEY_CURRENT_USER\Keyboard Layout\Preload\temp")
end if
Set WshShell = nothing