dog
41
突然发现,其实如果用autohotkey来写代码的话,连切换输入法都不需要了!
autohotkey的send公式有个{text}模式,可以无视当前输入法,直接输出英文字符
,完全按照字符去输出。
所以只需要以下非常简短的代码,就可以更优雅高效地搞定了
#SingleInstance force
#Persistent
#include Lib\AutoHotInterception.ahk
AHI := new AutoHotInterception()
keyboardId := AHI.GetKeyboardId(0x0433, 0x0004)
AHI.SubscribeKeyboard(keyboardId, true, Func("KeyEven"))
return
KeyEven(code, state){
If (state==1)
{
st = %code%
scnum := Format("{:03X}", st)
st = SC%scnum%
name:= GetKeyName(st)
SendInput, {text}%name%
}
}
不过这个只针对数字键、小写字母、英文符号可用,大写字母和功能键需要另外写if语句,效果如图:
功能键被按照键名输出了
1 个赞
这个代码更快啊。不过空格需要特别处理一下 :)其他的键可以不管它,用另一个键盘来输入。
不知道是不是变量范围的问题,这个特殊键已经转换了,但是字母没输出
If (state==1)
{
st = %code%
scnum := Format("{:03X}", st)
st = SC%scnum%
name:= GetKeyName(st)
array1 := ["Space", "Tab", "CapsLock","LShift","LControl","LAlt","Backspace","NumpadEnter","RShift","RControl","RAlt"]
haveout=False
for index, element in array1
{
if(name == element){
haveout=true
send,^+1
sleep,100
sttttt =%code%
sttttt := Format("{:03X}", sttttt)
SendInput, {SC%sttttt%}
send,^+2
}
}
if(haveout){
;SendInput, {text}%name%
}
else{
SendInput, {text}%name%
}
}
英文键盘特殊键起作用的:
If (state==1)
{
st = %code%
scnum := Format("{:03X}", st)
st = SC%scnum%
name:= GetKeyName(st)
array1 := ["Space", "Tab", "CapsLock","LShift","LControl","LAlt","Backspace","NumpadEnter","RShift","RControl","RAlt"]
global haveout=False
for index, element in array1
{
if(name == element){
haveout=true
send,^+1
sleep,100
sttttt =%code%
sttttt := Format("{:03X}", sttttt)
SendInput, {SC%sttttt%}
send,^+2
}
}
if(haveout){
;SendInput, {text}%name%
}
else{
SendInput, {text}%name%
haveout=False
}
}
实际使用一段时间后的反馈:确实方便了些(尤其是在输入验证码的时候),不过桌子摆两个键盘,操作上并不是很方便…占地方也容易误碰?