求助用autohotkey编写键盘替换脚本

要求:
当按下“~”键时(不输出“~”)
Q键替换为7,W键替换为8,E键替换为9(具体还有8个键要替换,这里就不写了,我自己来增加)
若按下空格键,则输出空格键,结束上面的按键替换,键盘恢复正常
等待下一次输入“~”键
另,这个脚本不管有无运行,都不能影响我其它不涉及替换的按键的正常使用

;定义变量
toggle = 0


`::
;~
toggle = 1
Return

~Space::
;加~发送原有按键
toggle = 0
Return

$q::
;加$屏蔽脚本按键
if toggle = 1
{
Send, {7 Down} ;第一次按下一秒内只发送一次
KeyWait, q, T1
Loop
{
GetKeyState, q_state, q, P ;检测q的状态
if q_state = U
{
Send, {7 Up} ;抬起
Break ;中断循环
}
Else
{
Send, {7 Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
if toggle = 0
{
Send, {q Down} ;第一次按下一秒内只发送一次
KeyWait, q, T1
Loop
{
GetKeyState, q_state, q, P ;检测q的状态
if q_state = U
{
Send, {q Up} ;抬起
Break ;中断循环
}
Else
{
Send, {q Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
Return

$w::
;加$屏蔽脚本按键
if toggle = 1
{
Send, {8 Down} ;第一次按下一秒内只发送一次
KeyWait, w, T1
Loop
{
GetKeyState, w_state, w, P ;检测q的状态
if w_state = U
{
Send, {8 Up} ;抬起
Break ;中断循环
}
Else
{
Send, {8 Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
if toggle = 0
{
Send, {w Down} ;第一次按下一秒内只发送一次
KeyWait, w, T1
Loop
{
GetKeyState, w_state, w, P ;检测q的状态
if w_state = U
{
Send, {w Up} ;抬起
Break ;中断循环
}
Else
{
Send, {w Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
Return

追问

感谢您的答案!
运行发现了一个问题,按Q键时输出了连续的7,我只需要按一次Q输出一次7即可。
可否帮忙调整下。

追答

↑上面已调整   简单版本  仅按一次

;定义变量
toggle = 0


`::
;~
toggle = 1
Return

~Space::
;加~发送原有按键
toggle = 0
Return

$q::
;加$屏蔽脚本按键
if toggle = 1
Send, 7
if toggle = 0
Send, q
Return

$w::
;加$屏蔽脚本按键
if toggle = 1
Send, 8
if toggle = 0
Send, w
Return

追问

看到简单版本了,非常喜欢。
追加个请求,让F键替换为退格键,V键替换为.小数点,能帮忙吗,我不是IT专业的,对编程只有N年前的C语言而且已经忘光了

追答

简单版后面加


$f::
;加$屏蔽脚本按键
if toggle = 1
    Send, {BackSpace}
if toggle = 0
    Send, f
Return

$v::
;加$屏蔽脚本按键
if toggle = 1
    Send, .
if toggle = 0
    Send, v
Return


长版后面加


$f::
;加$屏蔽脚本按键
if toggle = 1
{
Send, {BackSpace Down} ;第一次按下一秒内只发送一次
KeyWait, f, T1
Loop
{
GetKeyState, f_state, f, P ;检测f的状态
if f_state = U
{
Send, {BackSpace Up} ;抬起
Break ;中断循环
}
Else
{
Send, {BackSpace Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
if toggle = 0
{
Send, {f Down} ;第一次按下一秒内只发送一次
KeyWait, f, T1
Loop
{
GetKeyState, f_state, f, P ;检测f的状态
if f_state = U
{
Send, {f Up} ;抬起
Break ;中断循环
}
Else
{
Send, {f Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
Return

$v::
;加$屏蔽脚本按键
if toggle = 1
{
Send, {. Down} ;第一次按下一秒内只发送一次
KeyWait, v, T1
Loop
{
GetKeyState, v_state, v, P ;检测v的状态
if v_state = U
{
Send, {. Up} ;抬起
Break ;中断循环
}
Else
{
Send, {. Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
if toggle = 0
{
Send, {v Down} ;第一次按下一秒内只发送一次
KeyWait, v, T1
Loop
{
GetKeyState, f_state, v, P ;检测v的状态
if v_state = U
{
Send, {v Up} ;抬起
Break ;中断循环
}
Else
{
Send, {v Down} ;按下
}
Sleep, 30 ;休息30ms
}
}
Return

温馨提示:答案为网友推荐,仅供参考
相似回答