SetOutPath $SYSDIR
File WBIME.ime
Push "五笔输入法"
Push "$SYSDIRWBIME.ime"
System::Call "Imm32::ImmInstallIME(t s, t s) i .s"
System::Call "Imm32::ImmIsIME(i s) i .s"
Pop $0
IntCmp $0 1 0 +3 +3
MessageBox MB_OK "输入法安装成功"
Goto +2
MessageBox MB_OK "输入法安装失败"
使用Imm32安装输入法
使用遍历注册表来安装输入法
;***************************************************************************安装区段开始*
#######################以下为导入文件区内容:
var isubkey ;存放枚举的子键。SystemCurrentControlSetControlKeyboard Layouts
var icolIndex ;存放循环控制变量 w
var iinstallImekey ;存放新增输入法的中文显示
var ivalue ;存放欲新新输入法 keyboard layoutpreload 下的键名.如1/2/3/4
var imeInstallKey ;存入欲新增输入法子键。SystemCurrentControlSetControlKeyboard Layouts
var blnChangePreload
!macro InstallIME ime_name
strcpy $blnChangePreload "true"
#第一个循环是为了找到ime_name所指定的输入法在 Keyboard Layouts键下的项值,如:E0020804
${Do} #枚举搜索子键
EnumRegKey $isubKey HKEY_LOCAL_MACHINE "SystemCurrentControlSetControlKeyboard Layouts" $icolIndex
${If} $isubKey == "" #如果已枚举搜索完毕,退出循环
${ExitDo}
${Endif}
#读取对应子键的"layout text"键名的值
readregstr $iinstallImekey HKEY_LOCAL_MACHINE "SystemCurrentControlSetControlKeyboard Layouts$isubKey" "layout text"
${If} $iinstallImekey == ${ime_name}#找到安装输入法的子键,并将子键保存到$imeInstallKey变量中,循环结束
strcpy $imeInstallKey $isubkey
${ExitDo}
${Endif}
IntOp $icolIndex $icolIndex + 1
${Loop}
#第二个循环的目的是为了寻找输入法在perload中的位置,如果在4以后的位置(也就是通过快捷键无法切换)
#就将它的位置与preload为2的输入法换一下快捷链切换顺序。
StrCpy $icolIndex 0
${Do}
EnumRegVALUE $ivalue HKEY_CURRENT_USER "keyboard layoutpreload" $icolIndex
${If} $ivalue == "" #如果已枚举搜索完毕,退出循环
${ExitDo}
${Endif}
#读取枚举出来的键的值
readregstr $0 HKEY_CURRENT_USER "keyboard layoutpreload" $ivalue
${If} $imeInstallKey == $0 #已找到输入法所对应的preload位置
${If} $ivalue < 4 #如果输入法所对应的perload在快捷键切换以内
strcpy $blnChangePreload "false" #提示后面,不需要对这个位置进行变换了
${EndIf}
${ExitDo}
${EndIf}
IntOp $icolIndex $icolIndex + 1
${Loop}
${If} $blnChangePreload == "true" #如果需要变换快捷键切换位置
${AndIf} $isubKey != "" #并且输入法已经安装成功了
readRegStr $R1 HKEY_CURRENT_USER "keyboard layoutpreload" "2"
writeregstr HKEY_CURRENT_USER "keyboard layoutpreload" "2" "$imeInstallKey"
writeregstr HKEY_CURRENT_USER "keyboard layoutpreload" "$ivalue" "$R1"
${EndIf}
!macroend
#######################以下为导入文件区内容:
Section "专业五笔 V3.0"
SetOverwrite try #有错误路过!
SetOutPath "$SYSDIR"
File "system32zywb30.IME"
File "system32zywb30.MB"
System::Call "Imm32::ImmInstallIME(t '$SYSDIRzywb30.IME', t '专业五笔 V3.0') i .s"
!insertmacro InstallIME "'专业五笔 V3.0'"
SectionEnd
THE END
暂无评论内容