如果按住足够长的时间,将自定义键映射到 shift

Posted

技术标签:

【中文标题】如果按住足够长的时间,将自定义键映射到 shift【英文标题】:Map custom key to shift if hold long enough 【发布时间】:2022-01-22 15:57:57 【问题描述】:

仅当 f 键保持足够长的时间(例如 100 毫秒)时,如何将“f”键映射到“shift”键。我之所以要这样做是因为 f 键比 shift 键更容易触及...

我尝试了以下方法,但这不起作用(基于 user3419297 的回答):

 $f::
    time = 0
    Send, f
    SetTimer detect_key_released, 1  ; 1 ms timer
return

detect_key_released:
    time++ ; checks the number in the variable "time" and increases it by 1 every 1 ms (in accordance with the timer period)
    if (time > 100)
        Send, BsShift Down  
    KeyWait, f  ; wait for f to be released
    Send, Shift Up
    SetTimer detect_key_released, off
    time = 0 ; reset
return

【问题讨论】:

【参考方案1】:

试试这个:

$f:: 
    Keywait, f, T0.5 ; waits 0.5 seconds maximally for f to be released
    if ErrorLevel    ; pressed for above that time
    
         SendInput, Shift Down
         Keywait, f  ; waits for f to be released
         SendInput, Shift Up
    
    else
         Send f
Return

https://www.autohotkey.com/docs/commands/KeyWait.htm

【讨论】:

您的代码有一个问题,如果您快速键入例如“fo”(意思是在 f 仍然按下时已经按下 o),那么您会得到以下输出“Of”。 您的第二个建议仍然存在写“Of”而不是“fo”的错误,正如我在第一条评论中提到的那样。我用我试过的代码编辑了我的问题,但不知何故不起作用。 尝试将第二个建议中 f 发布后的时间增加到例如1000 毫秒(1 秒):if (A_TickCount - StartTime < 1000). 我的想法是仅在 f 保持足够长的时间时才激活 shift。使用您的两个脚本,您可以立即激活 shift... 尝试编辑后的答案。

以上是关于如果按住足够长的时间,将自定义键映射到 shift的主要内容,如果未能解决你的问题,请参考以下文章

代码的快速操作

xml Karabiner的自定义XML。使F19保持=保持选项+命令+ shift +控制。攻丝F19触发退出键。 (将`capslock`映射到键'8

Typegoose / Mongoose 将自定义类型映射到 db

如何将自定义属性添加到 Symfony Doctrine YAML 映射文件

在 C#/Windows 窗体中检测应用程序启动时的 shift 键

Entityframework 6:如何将自定义类型映射到 SQL 表