查看: 5600|回复: 10
收起左侧

[软件] (求助)autohotkey 长按组合键

[复制链接]
adia
发表于 2016-4-20 19:21:56 | 显示全部楼层 |阅读模式
本帖最后由 adia 于 2016-4-20 19:23 编辑

请问autohotkey怎样写下面功能的配置?
“长按caps lock”或“长按D”或“长按L”都相当于“长按CTRL”;而单击则不改变原有功能。这三个键的长按都想改的,先谢谢~@随便注册

大侠们,若有其他软件或方案也推荐一下,谢谢~
随便注册
发表于 2016-4-20 21:37:36 | 显示全部楼层
搜了下,没长按的功能啊
adia
 楼主| 发表于 2016-4-20 21:47:12 | 显示全部楼层
本帖最后由 adia 于 2016-4-20 21:52 编辑
随便注册 发表于 2016-4-20 21:37
搜了下,没长按的功能啊


可能要间接实现,我搜到两个链接,大虾帮忙看看
https://gist.github.com/babyking/5057457     这个链接你若打不开我再复制内容过来这里吧;

还有一个:
https://autohotkey.com/boards/viewtopic.php?t=6082
随便注册
发表于 2016-4-20 22:08:33 | 显示全部楼层
adia 发表于 2016-4-20 21:47
可能要间接实现,我搜到两个链接,大虾帮忙看看:
https://gist.github.com/babyking/5057457   ...

我就学了几句,用完就放一边了
只能打开第二个,keywait需要等键抬起才激活,而你需要按住CTRL不放,这点无法满足。
还找到一个http://ahk8.com/thread-5079.html,但需要结束脚本。

评分

参与人数 1人气 +2 收起 理由
adia + 2 感谢解答: )

查看全部评分

adia
 楼主| 发表于 2016-4-20 22:31:22 | 显示全部楼层
随便注册 发表于 2016-4-20 22:08
我就学了几句,用完就放一边了
只能打开第二个,keywait需要等键抬起才激活,而你需要按住CTRL不 ...

这样呀,给那个网页你看看吧,搞不定也没所谓了,哈哈,若能搞得出来就是惊喜了~
我是新手,也是看不懂怎么写配置。

你能回复我已经感激你了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
随便注册
发表于 2016-4-20 22:55:23 | 显示全部楼层
本帖最后由 随便注册 于 2016-4-20 23:50 编辑
adia 发表于 2016-4-20 22:31
这样呀,给那个网页你看看吧,搞不定也没所谓了,哈哈,若能搞得出来就是惊喜了~
我是新手,也是看不懂 ...


用他们的思路试了试,发送别的字符算凑合出来了,但偏偏发送ctrl不行,按住d不仅AHK在发送send {Ctrl Down},而且由于键盘不断发送d,两相组合相当于ctrl+d了。想不出招了。


@adia
刚学到重映射,把发送指定键改成重映射,d就变成了ctrl,能解决ctrl+d问题。但还是卡。

        {
                d::Ctrl
        }

这样试试,等待d键抬起,0.05秒内抬起就发送d,没抬则映射d为Ctrl。时间短,单击不显得卡,但长按时会先发送个d,自己调吧。
$d::
KeyWait, d, T0.05
        send d
        d::Ctrl

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
adia
 楼主| 发表于 2016-4-20 23:51:22 | 显示全部楼层
随便注册 发表于 2016-4-20 22:55
用他们的思路试了试,发送别的字符算凑合出来了,但偏偏发送ctrl不行,按住d不仅AHK在发送send {Ctrl D ...

先谢谢,看到这两篇不知道有没有帮助:
http://amnesiac10.github.io/2014/08/03/times-and-period.html
http://amnesiac10.github.io/2014 ... ation-sequence.html
随便注册
发表于 2016-4-21 00:08:01 | 显示全部楼层
adia 发表于 2016-4-20 23:51
先谢谢,看到这两篇不知道有没有帮助:
http://amnesiac10.github.io/2014/08/03/times-and-period.html ...

原来都这么做过,那个StartTime := A_TickCount还有另一个计时我也用了,但问题就是出在“可以看出长按一个按键时我们可能认为只会发送一次按下事件,但实际上它会发送连续的按下事件”。计时不是算第一次按下,而是算最新一次。
adia
 楼主| 发表于 2016-4-21 00:16:21 | 显示全部楼层
随便注册 发表于 2016-4-21 00:08
原来都这么做过,那个StartTime := A_TickCount还有另一个计时我也用了,但问题就是出在“可以看出 ...

大虾你厉害!那么最终应该怎样写呢?能再传一次附件吗
随便注册
发表于 2016-4-21 00:34:19 | 显示全部楼层
本帖最后由 随便注册 于 2016-4-21 00:49 编辑
adia 发表于 2016-4-21 00:16
大虾你厉害!那么最终应该怎样写呢?能再传一次附件吗

就是6楼最后那4行,自己调一下等待时间,我在记事本里测试的Ctrl+A、Ctrl+X
如果用了后出现奇怪的问题,比如点不了东西,窗口无法激活,可能是Ctrl键没“抬”起来,按一下Ctrl
  1. $d::
  2. KeyWait, d, T0.05
  3. send d
  4. d::Ctrl
  5. return

  6. $l::
  7. KeyWait, l, T0.05
  8. send l
  9. l::Ctrl
  10. return

  11. $CapsLock::
  12. KeyWait, CapsLock, T0.05
  13. SetStoreCapslockMode, Off
  14. send {CapsLock}
  15. CapsLock::Ctrl
  16. return
复制代码



用他的模仿了一下,长按成为ctrl没问题,但还是单击卡,不能像没脚本时那么快。脚本忘关,打字时很明显,可能机器配置好会好些。
  1. $d::
  2. ;设置起始时间值
  3. StartTime := A_TickCount

  4. ;200毫秒后检测d键状态
  5. sleep 200

  6. if(GetKeyState("d","P"))
  7. ;如果按住了,重映射d为Ctrl
  8.         {
  9.                 d::Ctrl
  10.         }
  11. Hotkey, d up, dUpSub, On
  12. return

  13. dUpSub:
  14. Hotkey, d up, dUpSub, Off
  15. ;计算按住了多长时间
  16. TimeLength := A_TickCount - StartTime
  17. if (TimeLength < 200)
  18. {
  19.         send d
  20. }
  21. StartTime := ""
  22. return
复制代码
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-16 10:47 , Processed in 0.147867 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表