如何在没有意外激活封锁模式的情况下交换Capslock和Ctrl?

时间:2018-04-22 05:01:18

标签: windows-7 autohotkey ctrl capslock

我有一个简单的AutoHotKey脚本:

Capslock::Ctrl
#Capslock::Capslock 

重点是,即使我只想让它作为Ctrl运行,也会激活大写锁定模式,但我无法停止。唯一的方法是暂停脚本,修复它,然后重新激活它。

如何让它按预期工作?

密钥历史

VK  SC  Type    Up/Dn   Elapsed Key     Window
----------------------------------------------
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.06    CapsLock        
14  03A h   d   0.03    CapsLock        
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.03    Control         
11  01D i   d   0.00    Control         
14  03A h   d   0.00    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   d   0.03    CapsLock        
11  01D i   d   0.00    Control         
14  03A h   u   0.03    CapsLock        
11  01D i   u   0.00    Control 

3 个答案:

答案 0 :(得分:1)

您的代码存在一个明显的问题:Ctrl是修饰键,而Capslock则不是,这会产生意外结果,包括Roman所描述的内容。

请改为尝试:

Capslock::SendInput {Ctrl Down}
Capslock Up::SendInput {Ctrl Up}
#Capslock::Capslock

答案 1 :(得分:1)

回答:

  

为什么按Shift + CapsShift优先)激活大写锁定模式?

由于+Capslock在技术上是另一个热键,因此您可能希望通过添加其他条目+Capslock::来分配其他任务,因此默认情况下不会被Capslock::捕获。

要捕获所有组合而不为每个组合添加单独的条目,请尝试:

*Capslock::SendInput {Blind}{Ctrl Down}
*Capslock Up::SendInput {Blind}{Ctrl Up}

但是,此可能会干扰#Capslock::条目,具体取决于上下文。

因此,指定所有可能的组合是安全的,虽然它看起来有点过于复杂甚至难看。

修改

关于您添加的密钥历史记录,

  1. 您是否看到3个CapsLock条目,中间只有2个Control条目?我猜这个剧本不知何故错过了#39;按键事件,当脚本本身忙于执行其他操作时,或者由于其他任务占用CPU而导致OS没有给脚本足够的时间片时,就会发生这种情况。
  2. 我已经映射了一个不经常使用的键来修改和映射 I J L to Up Down Left Right ,有时也会发生同样的事情。就像我按住一个组合片段一段时间,比如说,上升100多行,它会在中间留下一个意外的i。并非总是如此,但有时
  3. 尽管如此,使用脚本顶部的Process Priority,, A可以提供帮助,使故障更少发生。

答案 2 :(得分:0)

the answer of johnlee所述,可能是因为

  

脚本本身太忙于做其他事情,或者由于其他任务占用CPU,操作系统没有给脚本足够的时间片

所以我无能为力。所以我的解决方案是

#Space::Capslock

使用Capslock::Ctrl优于Capslock::SendInput {Blind}{Ctrl Down},因为当首先按下 Shift 时,它不会激活 Shift + Ctrl