为什么第二层不能使用GetKeyState?

问题描述 投票:0回答:1

我的AHK脚本有以下部分:

#If GetKeyState("RAlt", "P")  ; When Right Alt is pressed
    i::Up
    j::Left
    k::Down
    l::Right
#If  ; Ends the block

但是,每当我按住右侧 Alt 并按任何这些作用域键时,什么也没有发生。您可能已经注意到,我才刚刚开始使用 AHK,现在想对这个问题有一个实际的了解。

为了确保我没有任何冲突的代码,这是我的完整(简单)脚本:

; Colemak Mod-DH mapping for ANSI boards


;SC010::q
;SC011::w
SC012::f
SC013::p
SC014::b
SC015::j
SC016::l
SC017::u
SC018::y


;SC01E::a
SC01F::r
SC020::s
SC021::t
;SC022::g
SC023::m
SC024::n
SC025::e
SC026::i
SC027::o

SC02c::x
SC02d::c
SC02e::d
;SC02f::v
SC030::z
SC031::k
SC032::h

#If GetKeyState("RAlt", "P")  ; When Right Alt is pressed
    i::Up
    j::Left
    k::Down
    l::Right
#If  ; Ends the block

keyboard autohotkey
1个回答
0
投票

您在使用 AutoHotkey (AHK) 脚本时遇到的问题可能是由于上下文相关热键的定义方式造成的。具体来说,在 #If 语句中使用 GetKeyState 有时会导致结果不符合预期,特别是对于 Alt 等修饰键。

  1. <^ and ! Modifiers: In the AHK script, the <^> 修饰符表示 AltGr 或右 Alt (RAlt),并且 !用于指定 Alt 键。通过组合它们,您可以创建一个热键,该热键在按下两个键时专门触发。

  2. 直接热键映射:不使用 #If 和 GetKeyState,而是使用修饰符直接映射组合。这可确保脚本侦听您感兴趣的确切组合。

  3. 避免 #If 与 GetKeyState 用于修饰符:将 #If 与 GetKeyState 一起使用有时无法可靠地检测修饰键的即时状态,这就是为什么直接定义组合是更可靠的解决方案。

请从这里阅读更多相关信息:https://impetusorgansseparation.com/avnneqwn?key=670ae0c3b093d8e8ac42c57aa7da8c14

© www.soinside.com 2019 - 2024. All rights reserved.