Page 1 of 1

修饰键映射问题求教

Posted: 09 Sep 2020, 08:38
by emacs25
刚接触autohoktey没多久,想实现如下功能
单击Lalt输出空格,按住不放为LControl,参考网络上的代码如下:

Code: Select all

Lalt::
Send {LControl Down}
KeyWait, Lalt
Send {LControl Up}
If ( A_PriorKey = "Lalt")
{
Send {SPC}
}
return
运行结果不成功,请教各位大神,代码存在什么问题,要如何修正呢,感谢!

Re: 修饰键映射问题求教  Topic is solved

Posted: 11 Sep 2020, 03:29
by tmplinshi

Code: Select all

; 单击 LAlt 输出空格,按住不放为 LControl
LAlt::
	KeyWait, LAlt, T0.3 ; 等待 LAlt 松开, 等待时间 0.3 秒
	if ErrorLevel { ; 超时
		LAlt::LControl
	} else {
		Send {Space}
	}
Return

Re: 修饰键映射问题求教

Posted: 11 Sep 2020, 05:58
by emacs25
感谢大神的解答,已经测试成功

另外求教我上面的代码哪里有问题呢

Re: 修饰键映射问题求教

Posted: 11 Sep 2020, 06:52
by tmplinshi
首先, 空格的名称是 {Space}, 而不是 {SPC}
然后, 可以用 A_TimeSinceThisHotkey 来判断长按短按

Code: Select all

^r::MsgBox  Ctrl + r
^!r::MsgBox Alt + Ctrl + r

Lalt::
   Send {LControl Down}
   KeyWait, Lalt
   Send {LControl Up}
   If (A_TimeSinceThisHotkey < 300)
   {
      Send {Space}
   }
return
以上代码可以区分长按短按, 但是当你长按住alt, 再按 r, 会发现实际上触发的是 Alt + Ctrl + r, 而不是预想中的 Ctrl + r.
另外代码逻辑与你的描述也不一致. 你的描述是 "单击变空格, 长按变 ctrl", 但是代码不管长按短按都会按 ctrl

Re: 修饰键映射问题求教

Posted: 11 Sep 2020, 08:18
by emacs25
懂了,谢谢大神的仔细解释,再次感谢

Re: 修饰键映射问题求教

Posted: 13 Sep 2020, 04:37
by emacs25
tmplinshi wrote:
11 Sep 2020, 03:29

Code: Select all

; 单击 LAlt 输出空格,按住不放为 LControl
LAlt::
	KeyWait, LAlt, T0.3 ; 等待 LAlt 松开, 等待时间 0.3 秒
	if ErrorLevel { ; 超时
		LAlt::LControl
	} else {
		Send {Space}
	}
Return
再请教一个问题,根据如上代码,我在使用过程当中发现一个奇怪现象

当长按键的时候,表现没有任何问题,但是当短按键的时候,经常性的出现无响应

我以为是键盘的灵敏度出了问题,换了四个键盘,还是同样的情况

然后我把代码编译成独立Exe,使用过程还是同样的表现

想请问各位,这种情况是正常现象还是有问题,如果有问题的话,该如何去优化