Silence 发布的文章

TSFTool 是 IMETool 输入法设置工具的继承者,支持在 Windows 10/11/Windows Server 2019 操作系统下,支持新的 TSF 输入法框架,并部分兼容旧的 IMM 输入法框架。

下载:tsftool.rar

tsftool.png
版本历史:
0.9.3.0:解决命令行输入两个以上参数时,程序界面不自动退出的问题。将启用/禁用输入法的延时改为5秒。修正默认输入法设置为“美式键盘”时程序不能正确识别的问题。优化“每个窗口使用不同输入法”设置的生效速度。
0.9.2.9:增加命令行参数 /remove_eng,对应其它菜单下的删除顽固的英语美式键盘功能(不删除注册表项目)。
0.9.2.8:修订因输入法名称中含有空格和大写字母带来的命令行参数 bug,受影响的命令:
add_name/del_name/move_name/default_name/hotkey_name。
0.9.2.7:修改导出/导出配置文件格式,解决某些特殊情况下可能出现冲突的问题。
0.9.2.6:增加导出/导出配置功能(在其它功能菜单下)。去除 0.9.2.5 增加的禁用所有输入法功能。
0.9.2.5:增加禁用所有输入法功能(因为必须保留至少一个输入法,故全部禁用后保留了一个美式键盘)。
0.9.2.4:增加导出输入法列表功能。取消等待4秒的对话框。
0.9.2.3:修正两处 bug。
0.9.2.2:旧的 IMM 框架输入法在列表中显示为绿色。增加删除按钮,从注册表中删除无用输入法项目交由用户处理。
0.9.2.1:在启用/禁用输入法后强制延时4秒,避免系统操作太慢可能会导致程序报错。此版本可以清除小狼毫等输入法卸载后在注册表中的残留项目。
0.9.2.0:增加命令行参数支持;增加帮助窗口;一些细微的程序内部调整。
0.9.1.3:修补从 0.9.1.0 版本开始遗漏的写入键盘切换热键的部分代码(感谢 waiting 的提醒)。
0.9.1.2:旧版本的 Windows10 不支持表情符号面板功能,TSFTool 启动时会报错。此版本修订这一问题。
0.9.1.1:某种输入法禁用时,如果其已被设置为默认输入法,则将默认输入法改为语言列表。英文键盘布局在禁用/启用时,增加一个延时关闭的提示对话框,以免操作过快引起异常。增加删除顽固存在的英语美式键盘布局功能。
0.9.1.0:全部重写代码,使用不同的方式处理,支持旧的 IMM 框架输入法,修复一些 Bug。此版本需要管理员权限。增加 32 位版本,32位版本也可以正常支持 64 位的 Windows10。
0.9.0.0:初始版本,只支持 TSF框架输入法。

命令行参数:
/? /h /help 显示此帮助内容。
/r /refresh 重载键盘布局。
/remove_eng 删除顽固的英语美式键盘(不删除注册表项目)。
/caps 使用 Caps Lock 键关闭大写。
/shift 使用 Shift 键关闭大写。
/alone:0 各个窗口使用相同的输入法。
/alone:1 各个窗口使用独立的输入法。
/bar:0 关闭桌面状态栏。
/bar:1 打开桌面状态栏。
/emoji:0 表情符号面板自动关闭。
/emoji:1 表情符号面板不自动关闭。
/layout:0/1/2/3 键盘布局切换热键:0:禁用;1:Ctrl+Alt;2:Alt+Shift;3:` 。
/lang:0/1/2/3 输入语言切换热键:0:禁用;1:Ctrl+Alt;2:Alt+Shift;3:` 。
/add_num:<输入法序号> 按序号添加到输入法列表。
/add_name:<输入法名称> 按名称添加到输入法列表。
/del_num:<输入法序号> 按序号从输入法列表中禁用。
/del_name:<输入法名称> 按名称从输入法列表中禁用。
/del_all 禁用列表中所有输入法。
/move_num:<输入法序号> <新序号> 将指定序号的输入法移动到新位置。
/move_name:<输入法名称> <新序号> 将指定名称的输入法移动到新位置。输入法名称中如有空格,需要用双引号括起来。
/langlist 使用语言列表替代默认输入法。
/default_num:<输入法序号> 将指定序号的输入法设置为默认输入法。
/default_name:<输入法名称> 将指定名称的输入法设置为默认输入法。
/export_enabled_list: <文件名> 导出当前使用的输入法列表。
/export_disabled_list: <文件名> 导出禁用的输入法列表。
/hotkey_num:<输入法序号> 按序号指定输入法热键,不填写热键表示删除热键。
/hotkey_name:<输入法名称> 按名称指定输入法热键,不填写热键表示删除热键。输入法名称中如有空格,需要用双引号括起来。
/switchkey:<a/b/c> 设置通用切换热键。a: 打开关闭输入法;b: 全角半角切换;c: 中英
文标点切换。

热键格式: 分两部分,以空格分隔,左侧为控制键,右侧为字符键,如:ctrl 5、shift home、ctrl+alt d 等。
左侧控制键列表如下(不分大小写):
Alt
Ctrl
Left_Ctrl
Right_Ctrl
Ctrl+Alt
Shift
Left_Shift
Right_Shift
Alt+Shift
Ctrl+Shift
Left_Ctrl+Shift
Right_Ctrl+Shift
Ctrl+Alt+Shift

右侧字符键列表如下:
0~9、a~z、-=,.;'[]\等常规字符
? 因 / 被定义为参数的前导符,用 ? 来代表 /
~ 数字1左侧那个 ` 字符
BACKSPACE
TAB
ENTER
HOME
END
PGUP
PGDN
INS
DEL
LEFT
RIGHT
UP
DOWN
F1~F12
NUM0~NUM9 小键盘的0~9
NUM+
NUM-
NUM*
NUM? 代表小键盘的 /
NUM.
LEFT_WINDOW 左徽标键
RIGHT_WINDOW 右徽标键
APPS 应用程序键

几点说明:
一、关于热键

  1. 切换热键修改后立即生效,但只对新打开窗口有效,原有窗口仍是旧的热键有效。
  2. 切换热键可以单独选择左/右控制键,但是重启后会变回左右双键同时有效,这是 Windows 的设置功能混乱造成的,重载键盘布局即可重新生效。可以点击设置工具右下角的“刷新”按钮,也可以由命令行执行 tsftool /r 或 tsftool /refresh 重载键盘布局。
  3. TSF 类型的输入法和旧的IMM类型输入法能使用的热键范围有所不同。TSF 输入法的控制键不分左右,虽然Windows10 的相关设置界面里显示 Alt 键只能用左 Alt,实际右 Alt 键也有效,故在命令行中指定 TSF 输入法热键时不再加 left 前缀,如:alt、ctrl+alt 等。另外,TSF输入法不能使用 Windows 键和 APPS 键。
  4. IMM输入法的控制键可单独区分左右,但只能使用 ctrl、shift、ctrl+shift这三组控制键组合,如:ctrl、left_ctrl、right_ctrl+shift 等等。打开/关闭输入法、全角/半角切换和中英文标点切换的热键定义范围和 IMM 输入法一致。Windows10 目前不再定义全局的全半角切换和中英文标点切换热键,但有时候也会有效,所以暂时保留了这两组切换热键设置。
  5. 因为 / 被定义为命令行参数的前导符,从命令行指定热键时使用其上档键 ? 来代替 /,小键盘的 / 用 num? 代替。
  6. 输入法热键的重码检查暂时只在当前当前语言下进行,其它语言自行注意即可。功能待以后改进。但是三组通用切换热键允许不同语言重码,互不影响。
  7. 在 Windows10 的热键设置中对“~”键的定义有误,无法生效,为保持兼容性本工具也保留了这个定义;另 Windows10 热键设置中定义的“抑音符”实际为小键盘的数字0。

二、关于键盘布局

  1. Windows10 从 1903 版本开始,已经无法正常将中文简体-美式键盘显示在输入法列表中了(实际是存在并启用的)。为了方便一些老用户,我在程序的输入法列表里硬加了一个“美式键盘”,以蓝色显示,可以正常使用。但是我发现,当切换到美式键盘后,是无法用打开/关闭输入法的切换热键“Ctrl+空格”切换到其它输入法的,只有改用切换键盘布局热键“Ctrl+Shift”或徽标键+空格键。我个人建议是禁用美式键盘,然后把最常用的输入法设置初始状态为“英文”,再用“Ctrl+空格”就可以正常切换了。
  2. 暂时只支持 0409 这一种英文键盘布局。
  3. 因为某些原因,在对美式键盘进行启用、禁用操作时,刷新需要 3~4 秒,注意操作不要太快。

三、其它

  1. 所有设置修改后立即生效,没有设计“确定”、“应用”这类功能。
  2. 本工具支持 Windows10 32/64 位版本和 Windows Server 2019,32 位版本程序在 64 位操作系统下运行正常。Windows7/8 等以前的操作系统的设置实际差异较大,不再支持。
  3. 如果安装了多种语言的输入法,可以从底部的已安装语言列表中切换进行设置。
  4. 输入法列表中显示为“粗体” 的条目表示此输入法已设置为默认输入法,可以从列表上点击右键,从弹出菜单里修改相关设置。
  5. 每种语言下应至少保留一种输入法或键盘。
  6. 如果要添加/删除某些输入法语言,请转到操作系统的设置/时间和语言/语言下进行设置。尝试过直接删除语言,发现容易造成输入法状态混乱,暂时取消了这个功能。
  7. 偶尔会出现工具里的输入法列表和实际的输入法列表不太一致的现象,来回调整几次刷新刷新就会正常。主要原因是因为 Windows 在语言选项中的输入法列表和任务栏上的输入法列表是两个不同的配置,有时候条目数量和顺序会不一致,通过输入法工具设置会纠正这个问题。
  8. 某些输入法(如小狼毫)在卸载不完全时,TSFTool 的输入法列表里可能会存在空行,以后的版本会想办法解决这个问题( 0.9.2.1 版本已解决)。
  9. 要下载 TSFTool,可以去我的个人网站:https://www.mympc.org

             Silence
             2022年11月8日
    

  • 导出配置
    使用“其它功能”菜单下的“导出配置”功能,或者命令行 tsftool /savecfg: bak.cfg,生成配置文件 bak.cfg。配置文件为 INI 格式,文件编码格式为 utf-8,内容如下:

    [0804_list]
    1=微软五笔|{6A498709-E00B-4C45-A018-8F9E4081AE40}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{82590C13-F4DD-44F4-BA1D-8667246FDF8E}|00000000|Ctrl+5
    2=微软拼音|{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{FA550B04-5AD7-411F-A5AC-CA038EC515D7}|00000000|
    [0804_disabled]
    1=小狼毫|{A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{3D02CAB6-2B8E-4781-BA20-1C9267529467}|00000000
    2=美式键盘|{00000000-0000-0000-0000-000000000000}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{00000000-0000-0000-0000-000000000000}|04090804
    [0804_switchkey]
    layout=Ctrl+Shift
    language=Alt+Shift
    CAPS=Caps Lock
    Ime/NonIme Toggle=Ctrl+SPACE
    Symbol Toggle=Shift+SPACE
    Shape Toggle=Ctrl+.
    [0804_other]
    SwitchMode=1
    LanguageBar=0
    InputEmoji=1
    DefaultIME=0

    说明:
    配置文件中所有内容均为可选,使用时只须填写需要修改的内容即可。
    [0804_list] 小节为简体中文下的输入法列表。在小节下的内容中,等号左边的序号可以任意填写,导入配置时以此行的位置为准;等号右边以“|”分隔为七部分,最后一段为快捷键,没有的话留空。
    [0804_disabled] 小节在导入配置时并不使用。生成此小节的目的是为了方便填写 [0804_list] 小节。
    [0804_switchkey] 小节为通用的切换热键。
    [0804_other] 小节对应界面上其它设置部分。其中 SwitchMode(每个窗口使用不同输入法)功能在 Windows 11 下可能会因为执行过慢而不生效。DefaultIME 指的是默认输入法,取值为 0 表示使用语言列表,其它值对应 [0804_list] 小节下输入法各行的位置;如果将某输入法设置为默认,系统会自动将其提到输入法列表首位。

  • 导入配置
    以如下配置为例:

    [0804_list]
    1=小狼毫|{A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{3D02CAB6-2B8E-4781-BA20-1C9267529467}|00000000
    2=微软五笔|{6A498709-E00B-4C45-A018-8F9E4081AE40}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{82590C13-F4DD-44F4-BA1D-8667246FDF8E}|00000000|
    3=微软拼音|{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}|0804|{34745C63-B2F0-4784-8B67-5E12C8701A31}|{FA550B04-5AD7-411F-A5AC-CA038EC515D7}|00000000|
    [0804_other]
    DefaultIME=1

    此配置的功能是在输入法列表中保留小狼毫、微软五笔和微软拼音三种,并将小狼毫设置为默认输入法。使用“其它功能”菜单下的“导入配置”功能,或者命令行 tsftool /loadcfg: bak.cfg

最近偶然需要用一下 Delphi 下的 Raize,使用时报 rzborder.pas 错误。记忆中多少年前就知道这是个编码识别的问题。放狗一搜,居然现在有人说是RZ的源码有问题,不能指向RZ的源码;还有人说是源码缺失},辛辛苦苦地去一行行修改,把类似下面这种:

( { Col0: $00; Col1: $7E; Col2: $14; Col3: $08; Col4: $00 ),

改为:

( {} Col0: $00; Col1: $7E; Col2: $14; Col3: $08; Col4: $00 ),

实际上人家的源码没有任何错误,只是在中文系统下 Delphi 使用默认的GB2312编码格式把特殊字符+}错误地识别成了汉字而已。
解决方法很简单:用 Emeditor 以西欧 Windows-1252 编码页打开 rzborder.pas 文件,然后另存为带签名的 utf-8 编码格式即可。你会发现上面那行代码其实是这样的:

( {þ} Col0: $00; Col1: $7E; Col2: $14; Col3: $08; Col4: $00 ),

那个特殊字符 þ 的 16 进制编码是 FE,它后面的 } 是 7D,而汉字“”的 GB2312 编码恰好就是 16 进制的 FE7D。