脚本安装输入法

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
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容