使用时间禁用 AutoHotKey 的 Fn+F4

Disable Fn+F4 with AutoHotKey using time

我想使用 AutoHotKey 禁用 Alt+F4,当它们在 0.05 秒内相互按下时。否则,我希望它能正常工作。

解释:
我的联想 Yoga 2 Pro 的功能键有替代功能。
例如:"F3" 映射到 volume+,"F4" 映射到 "close active window"

有两种模式:

在任何一种模式下,我 运行 当我去使用 volume+ 时关闭我的活动 window 的风险因为它们太近了,这是非常有问题的。请注意,AutoHotKey 无法 检测到 Fn 键,因此我无法使用它来解决我的问题。

下图显示了 AutoHotKey 键历史记录工具。在 New-school 模式下,我输入 "asdf" 然后按 "F4" 即 "close active window"。可以看到这实际上模拟了ALT+F4,而且ALT和F4之间的持续时间很短...

我想我可以禁用这个 "close active window" 功能,方法是让 AutoHotKey 在两个键之间的间隔时间小于 0.05 秒时中断 ALT+F4 组合键。这能做到吗?

编辑: 为了响应 Blauhirn 的代码,这里是原始代码,经过编辑以缩短等待时间(从 50 到 10)。它在 大部分时间 有效,但仍然是 window 的 1/10 倍:

~alt::
hotkey, alt, off
hotkey, !F4, doNothing, on
sleep, 10
hotkey, !F4, doNothing, off
while(getKeyState("alt"))
    sleep, 1
hotkey, alt, on
return

doNothing:
return

这是我认为可以通过在检测到 "close active window" 时发送第二个 Alt 来解决我的焦点问题的更改:

doNothing:
send {LAlt}
return

但是,第二个 Alt 没有发送。它是在延迟超过 40ish 时发送的,但是我发现它太长了,反过来它会干扰我手动使用 Alt+F4。

你试过简单地使用

F4::return

?也许这会覆盖 F4

的 Lenovo 操作

除此之外,这是我能想到的两种方法:

  1. 默认禁用 ALT+F4 标准 win 热键。为延迟 F4

    添加自定义热键
    !F4::   ; by default:
    doNothing:  ; this is a label (see GoSub)
    return  ; == do nothing
    
    ~alt::  ; alt was pressed
        sleep, 50   ; wait 50 milliseconds
        if(!getKeyState("alt")) ; if alt is NOT pressed down anymore, exit
            return
        else    ; (else is actually unnecessary here)
            hotkey, !F4, close  ; Add new AltF4-hotkey
    return
    
    close:
        winclose, A ; close the Active window
    return
    
    ~alt up::   ; alt is being released
        hotkey, !F4, doNothing  ; remove the new AltF4 hotkey and go back to custom standard behaviour: do nothing.
    return
    

    it still triggers Alt, which usually leaves me in the menu of the active window (File, Edit, View, etc), or if typing within a textarea (such is this), it will remove typing focus.

    嗯,是的。如果您决定保留联想钥匙,我认为没有办法阻止它。按照你的建议,再次发送 ALT 应该可以解决问题

  2. using Input,在按下 ALT 之后。 Input 在可配置的时间内阻止用户输入,只要使用 V 选项。

(3. 禁用联想 Yoga 2 Pro 特殊键。如果您需要 F3 功能,您可以在 AutoHotkey 中执行此操作,例如使用 send {volume_up}