我如何重新映射鼠标点击,以便一旦我释放重新映射的键,先前按住的键就会继续发送输入?

我如何重新映射鼠标点击,以便一旦我释放重新映射的键,先前按住的键就会继续发送输入?

让我解释一下我的情况。

我按住 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

相关内容