发表回复 
如何实现类似粘滞键的功能
2012-03-17, 20 : 21 (这个帖子最后修改于: 2015-04-30 18 : 36 by robertL.)
如何实现类似粘滞键的功能
[i=s] 本帖最后由 Dogous 于 2012-3-22 13:10 编辑 [/i]

如何用autohotkey实现粘滞键,例如,先按一下Ctrl并松开,然后等待我按下一个键,如果按的是c则复制,如果按的是v则粘贴,如果超过一定时间,没有按下一个​键,则退出,谢谢!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-17, 23 : 05
 
代码: (全选)
~Control::
Return

$c::
if (A_PriorHotkey="~Control") and (A_TimeSincePriorHotkey<1500)
    MsgBox,Ctrl+C
Else
    send,c
Return

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢health901
2012-03-18, 12 : 01
 
厉害啊,谢谢大侠
另外还有两个问题,请帮忙解答一下,
1.如果脚本中有很多代码,如何实现按F1禁用其中一段,再按F1开启这一段呢
2.如何实现连续按3次或4次F1弹出msgbox?
谢谢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-18, 12 : 01
 
2# health901 厉害啊,谢谢大侠
另外还有两个问题,请帮忙解答一下,
1.如果脚本中有很多代码,如何实现按F1禁用其中一段,再按F1开启这一段呢
2.如何实现连续按3次或4次F1弹出msgbox?
谢谢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-18, 13 : 22
 
仔细看文档.文档中的KeyWait和SetTimer下面就有如何判断连续按两次按键,三次按键的例子.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢SmallG
2012-03-18, 19 : 25
 
6# SmallG 谢谢,不过这个思路我知道,但不知道具体代码怎么写,能给出代码例子吗
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-18, 19 : 28
 
5# SmallG 按两次的可以通过A_PriorHotkey 来判断,三次或四次怎么判断呢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-18, 22 : 04
 
6# SmallG 谢谢,问题已经解决,帮助里面有个HOTKEY 函数,O(∩_∩)O
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢Dogous
2012-03-20, 09 : 46
 
2# health901 你好,上次你帮我解决了:
如何用autohotkey实现粘滞键,
例如,先按一下Ctrl并松开,然后等待我按下一个键,如果按的是c则复制,如果按的是v则粘贴,如果超过一定时间,没有按下一个键,则退出,谢谢!
这里只实现了连续两次按键,主要是判断前次按键是什么及间隔时间,那么如何判断再前次按键及间隔时间呢?或者说前N次按键及间隔时间?谢谢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-20, 14 : 44
 
引用: 2# health901 你好,上次你帮我解决了:
如何用autohotkey实现粘滞键,
例如,先按一下Ctrl并松开,然后等待我按下一个键,如果按的是c则复制,如果按的是v则粘贴,如果超过一定时间,没有按下一个键,则退出,谢 ...
Dogous 发表于 2012-3-20 09:46 [Image: back.gif]

你能知道上一次按的是什么键.以及间隔时间,后面的不也都是一样么..
你可以把前一次(或者前N次...)的内容存到某个变量里面.
不过你这样按3次及以上同一个键来作为热键...实在是不推荐.比如按3次触发的.还必须判断这是连续按两次的热键还是三次的热键.这就导致你两次的热键反应会延迟很多(​因为在按了两次之后还要等待判断接下来的一段时间有没有第三次按键.没有或者按的是别的键则是连续两次的热键,才会继续执行)
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-20, 23 : 39
 
10# SmallG 嗯,其实这个思路我也想过,Autohotkey只提供了获取前次按键和间隔时间的函数,本以为Autohotkey还提供了更多的,希望了解一下,我用的笔记本,定义的​快捷键太多了,实在不够用,感谢你精彩的回答!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-21, 23 : 48
 
11# Dogous
要定义这样的热键, 需要更高的灵活性. 如果对AutoHotkey中热键及热字串的实现有所了解, 实现不会难, 帮助中的一些例子提供了一些思路, 而官方论坛中许多脚本则有对应不同情况的具体实现.

对于热键, 根据我们按键时的触发方式, 可分为组合热键和序列热键. 组合键不用举例了, 序列热键则是多次按键 (可以相同的, 也可以不同的) 来触发某个动作, 按键之间的按下和弹起事件不会交叉, 例如{a down}{a up}{b down}{b up}. 这里简要说说我实现这样的序列热键的方法:
首先, 把序列热键中的所有按键定义为热键, 例如
代码: (全选)
; 这里把所有的小写字母定义为热键
Loop, 26
{
  lower := Chr(A_Index + 96)
  if A_Index between 1 and 26
    Hotkey, %lower%, Sub
}
然后, 按要求写子程序, 例如在按下热键时判断是否构成序列热键的条件, 不同情况时实现怎样的操作. 例如, 我们在输入汉字时一/二/三码加空格上屏, 假设SerialKeys为我们已按下的热键, 那么当按下空格时即将SerialKeys变量包含的字母组合对应的汉字上屏 (此时空格也要定义为热键), 然后清空变量; 对于四码直接上屏, 则在每次输入字母时, 判断SerialKeys长度是否为四, 若是则上屏对应的汉字. 实现的细节请参阅: 简输入平台 - 全开放的输入平台
通过这种方法, 一个按键可定义任意数量的热键 (加上间隔时间进行判断以执行不同操作), 然而实际中通常不需要那么多那么复杂, AutoHotkey 中提供的是适用于较广泛的情况, 对于少量的序列热键, 可方便地使用input命令实现 (不过这里不能通过间隔时间判断).

此外, 前面SmallG所提到的情况也需要考虑. 所以需要兼顾各种情况, 综合考虑具体实现方法.

AutoHotkey 学习指南 我的帖子
我不生产代码,我只是 AutoHotkey 的搬运工:从官方到中文;从其他语言到 AutoHotkey;有时则把 AutoHotkey 搬运到普通用户面前。
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-03-22, 10 : 11
 
12# amnesiac 谢谢,思路挺好的,但目前对我来讲难度有点大,刚刚接触Autohotkey,语法函数都不太熟,另外,最近比较忙也没有时间研究,等有业余时间再好好学习一下
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2015-04-28, 10 : 39
RE: 如何实现类似粘滞键的功能
(2012-03-17 23 : 05)health901 提到:  
代码: (全选)
~Control::
Return

$c::
if (A_PriorHotkey="~Control") and (A_TimeSincePriorHotkey<1500)
    MsgBox,Ctrl+C
Else
    send,c
Return

这个很有用处
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合