原文地址,可以看出AutoHotkey开发一个输入法是多么的迅速,且代码量不大(不足200行)
#Include wubi86.ahk
;{{{ 透明窗口srf_icon
SplashImage, Splash.png,b X220 Y400 ,,,srf_icon, ;创建一个图片窗口
WinSet, Transparent, 0 , srf_icon, ;窗口完全透明
WinSet, TransColor, #0, srf_icon ; 透明色
WinSet, ExStyle, +0x20, srf_icon, ;允许鼠标穿透
WinSet, AlwaysOnTop, On , srf_icon, ;窗口置顶
;}}}
lshift & Lbutton::send +{Lbutton}
;{{{ Lshift键切换模式
Lshift::
srf_mode := !srf_mode
if srf_mode {
WinSet, Transparent, 250 , srf_icon,
WinSet, TransColor, #0, srf_icon ; 透明色
}
else
WinSet, Transparent, 0 , srf_icon,
return
;}}}
;{{{ StrLen(srf_all_input)=4 模式
#if StrLen(srf_all_input)=4
a::
b::
c::
d::
e::
f::
g::
h::
i::
j::
k::
l::
m::
n::
o::
p::
q::
r::
s::
t::
u::
v::
w::
x::
y::
z::
send %srf_for_select_array1%
gosub srf_value_off
srf_all_input := srf_all_input . A_ThisHotkey
gosub srf_tooltip
return
#if
;}}}
;{{{ srf_for_select_array0模式 空格、逗号、句号 定义
#if srf_for_select_array0
space::srf_select(1)
,::srf_select(2)
.::srf_select(3)
#if
;}}}
;{{{ srf_all_input模式 backspace键、esc键、enter键、Lshift键 定义
;在未完成一个字的输入前,可以删除输入的按键,取消输入,确定输入
#if srf_all_input
;{{{ backspace定义
backspace:: ; 删除前一个输入的字符,如果没有字符了,就关闭提示
srf_all_input := SubStr(srf_all_input, 1, -1)
if srf_all_input =
gosub srf_value_off
else
gosub srf_tooltip
return
;}}}
esc::gosub srf_value_off
enter:: ; 回车键,把输入的字符发送出来,继续输入法
send %srf_all_input%
gosub srf_value_off
return
Lshift:: ; 左shift,把输入的字符发送出来,关闭输入
send %srf_all_input%
gosub srf_value_off
WinSet, TransColor, FF0000 0 , srf_icon,
srf_mode =
return
#if
;}}}
;{{{ srf_mode模式 a-z键、esc键、中文符号 定义
#if srf_mode
;{{{ a-z定义
a::
b::
c::
d::
e::
f::
g::
h::
i::
j::
k::
l::
m::
n::
o::
p::
q::
r::
s::
t::
u::
v::
w::
x::
y::
z::
srf_all_input := srf_all_input . A_ThisHotkey
gosub srf_tooltip
return
;}}}
esc::
WinSet, TransColor, FF0000 0 , srf_icon,
srf_mode =
return
,::send {,}
.::send {。}
+;::send {:}
+'::send {“}{”}{left}
#if
;}}}
;{{{ 函数 srf_select
srf_select(list_num)
{
global
sendinput % srf_for_select_array%list_num%
gosub srf_value_off
}
;}}}
;{{{ 标签srf_tooltip
srf_tooltip:
tooltip, % srf_all_input . "`n[" . %srf_all_input% . "]", A_CaretX + 10 , A_CaretY + 20, 16
StringSplit, srf_for_select_array, %srf_all_input%, %A_Space%, %A_Space%
if (StrLen(srf_all_input)=4 and %srf_all_input%="") ;四码时,如果无候选,则自动清空编码
gosub srf_value_off
else if (StrLen(srf_all_input)=4 and srf_for_select_array0=1) ;四码时,如果候选唯一,则自动上屏
{
send %srf_for_select_array1%
gosub srf_value_off
}
return
;}}}
;{{{ 标签 srf_value_off
srf_value_off:
srf_for_select_array0=
tooltip, , , ,16
srf_all_input=
return
;}}}
;{{{ 自动reload
#IfWinActive,AutoHotkeyU32.ahk
~^s::
sleep 200
reload
return
#IfWinActive
;}}}