单击时为按键本身,长按时映射为其它按键长按?

动作需求 · 666 次浏览
长于舟 创建于 2023-12-17 14:54

我需要将顿号键重新修改映射:单击顿号键时不变,长按顿号键时映射为CapsLock键长按

 

原因:有个软件默认快捷键是CapsLock键长按触发,我想改为其它

 

网上找到将长按CapsLock键映射为长按其它键的资料,但我无法举一反三……

https://orxing.top/post/d3c3145e.html#前言

 

我也了解到AHK脚本能检查一个按键是单击还是长按,从而执行不同命令。但要如何将一个键的长按映射为另一个键长按我没研究明白:


#MenuMaskKey vkE8

SetWinDelay,0
CoordMode,mouse,Screen

$F11::   

StartTime := A_TickCount

MouseGetPos,mx1,my1,win
WinGetPos,winx,winy,winw,winh,ahk_id %win%

loop{

GetKeyState,varp,F11,p   

if varp=U
break

MouseGetPos,mx2,my2
xx=% winw + mx2 - mx1
yy=% winh + my2 - my1 
winmove,ahk_id %win%,,%winx%,%winy%,%xx%,%yy%

sleep,30
}

ElapsedTime := A_TickCount - StartTime

intInterval := 200 

if (ElapsedTime > intInterval)
{
    return
}

send {F11}

return

长于舟 最后更新于 2023/12/17

回复内容
CL 2023-12-17 19:07
#1

大概思路是这样:

- 按下后,开始计时,并且弄个timer,设置超时时间。

- 如果抬起的时候,timer没有到期,就是短按。

- 如果timer触发了,还没有抬起,就模拟另外那个按键按下。

- 按键重复的时候,模拟另外那个按键按下。

- 抬起按键的时候,停止这些处理。

如果不太了解AHK可能难以写出。 可以到小众论坛里请教一下,那边会ahk的多。

长于舟 回复 CL 2023-12-20 13:12 :

最后只是做了个分离式开关:

按下、键长按CapsLock,再按下、键抬起CapsLock

 #NoEnv
SendMode Input
#MenuMaskKey vkE8


$\::
if (onoff := !onoff)    
    send {capslock down}
else    
    send {capslock up}
Return

回复主贴