让我解释一下我的情况。
我按住 1 键,产生一串 1。当我右键或左键单击鼠标时,一串 1 会短暂停止,然后再次恢复,产生一串 1 的输入。在此过程中,1 键一直被按下并按住一次。
当我将鼠标左键和右键单击重新映射到键盘上的某个键时,就会出现问题;这就是发生的情况。
我再次按住 1 键,产生一串 1。当我按下重新映射的键时,1 串停止,鼠标左键/右键单击如预期,但是,一旦我释放重新映射的键,1 串就不会像第一种情况那样继续。这意味着我必须重新按下并按住 1 键才能再次开始 1 串。
问题:如何将鼠标点击重新映射到某个键,以便一旦我释放重新映射的键,1 的字符串就会继续?
答案1
在 AutoHotKey 中,您需要轮询在释放重新映射的键时按下的键,然后虚拟地重新按下它。
两个版本,一个简单,一个复杂:
简单版本会检查释放时按下的物理按键,然后重新按下它们
keysOfInterest := ["a","b","c",...] ; list of keys
LButton::
; Do a thing
return
LButton Up::
; Do an un-thing
for index, element in keysOfInterest
{
if GetKeyState(element,"P") ; key is physically down.
SendInput {%element% up}{%element% down}; re-press it
}
return
复杂版本,可跟踪在按下重新映射的键之前某个键是否已物理按下。如果在按下重新映射键期间按下该键,则不会做出反应。
keysOfInterest := ["a","b","c",...] ; list of keys
keyTrackOne := [0,0,0,...] ; track their state at key-down
LButton:: ; Key-down
for index, element in keysOfInterest ; cycle through keys of interest
{
if GetKeyState(element,"P") ; key is currently down
keyTrackOne[index] := 1 ; mark it as
}
; Do a thing
return
LButton up::
for index, element in keyTrackOne
{
if (element == 1) && GetKeyState(keysOfInterest[index],"P")
SendInput {%keysOfInterest[index]% Up}{%keysOfInterest[index]% Down}; re-press it
}
; Do an un-thing
return