个人认为,这个应该是最完美的一键多用的函数了。集按键次数、按键时间于一体,结合上下文快捷键使用的话,威力巨大。
可以自己调节按键的间隔时间。
原理:ahk有个利用settimer,shift键一键多用的函数,但是和下面这个相比就显得笨拙多了。那个的特点是设定一个如1000毫秒的时间间隔,在这个时间间隔内等待更多的按键,根据按键次数来决定执行哪一个动作;但是若是仅仅按了一次,还是要等待1000毫秒的时间。
摩斯密码的原理:按了第一个按键后,在设定的时间内如200毫秒内等待下一个键击,若是没有,则最多等待200毫秒,否则,只要在200毫秒内有新的键击,则一直不停的等待下一个。可以作为函数调用。
若是没有长时间按着,则返回0,快速按两下:返回00;
快速按1下后长按,再快速按两下后松开:返回0100,
其他以此类推。
摩斯(timeout =200){ ;by Laszo -> http://www.autohotkey.com/forum/viewtopic.php?t=16951 摩斯码= ;极其经典的摩斯密码函数; tout := timeout/1000 key := RegExReplace(A_ThisHotKey,"[<>\*\~\$\#\+\!\^( UP)( Down)]") ;"[<>\*\~\$\#\+\!\^( UP)]" ;~ MsgBox % key Loop { t := A_TickCount KeyWait %key% 摩斯码 .= A_TickCount-t>timeout ;这里用以判断是true(1)还是false(0) KeyWait %key%,DT%tout% If (ErrorLevel) Return 摩斯码 } Return ; } ;使用示例: F1:: aa:=摩斯(200) if(aa=0) MsgBox 按了1次F1; else if(aa="01") MsgBox 按了1次F1后长按F1,然后松开; else if(aa="0100") MsgBox 快速按了1次F1后长按F1,接着快速按了两下后松开; else MsgBox 其他的按键情况:%aa% return
赞一个先。
谢谢, 🙄 🙄
赞赞赞
先赞一个吧,确实不错的哈!!!
第20行应该是if(aa=”0″)吧??我快速按F1两次 他也判定我按一次。
这个代码有点问题,正确的函数https://www.autoahk.com/archives/3301
先赞一个吧,确实不错的哈!!!