Autohotkey - 새 키를 누르면 GetKeyState가 중단됩니다.

Autohotkey - 새 키를 누르면 GetKeyState가 중단됩니다.

물리적으로 스페이스 버튼을 누르는 동안 스페이스 버튼을 누르는 스크립트를 만들려고 합니다. 예를 들어 스페이스바를 누르고 있으면 스크립트는 Send. 스페이스바를 놓으면 공간 전송이 중단됩니다. 이 스크립트로 이것을 달성했습니다

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    if (GetKeyState("Space"))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

그러나 Space 버튼을 누른 상태에서 새 키를 누르면 GetKeyState("Space")어떤 이유로든 false가 반환됩니다. 스크립트는 현재 제대로 시작되지만 다른 키를 누르는 것은 스페이스바를 놓는 것과 같기 때문에 내가 원하는 것은 아닙니다.

그래서 어쩌면 Input나에게 도움이 될 수도 있겠다는 생각이 들었습니다. 다시 말하지만, 작동했지만 다른 키를 누르자마자 작동이 중지되었습니다.

다음은 Input제가 시도한 첫 번째 샘플과 상대적으로(타이밍 오프셋 포함) 동일한 결과를 생성한 것입니다.

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    Input, OutputVar, B I L4 T0.05 V ; Had to keep it a low timeout due to the nature of the script
    if (InStr(OutputVar, Chr(32)))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

새 키를 누르면 내부적으로 스페이스바를 누르는 것이 해제되기 때문에 이 방법도 실패합니다.

와 같은 키 바인딩 이벤트를 수행하려고 시도했지만 Space::명령에서도 실행되어 Send무한 루프가 생성되었습니다. 그리고 여러 개의 키가 무언가에 묶여 있기 때문에 스페이스바 이외의 다른 키를 누르고 싶지 않습니다.

필터 키나 고정 키처럼 느껴집니다. 자동 핫키가 없어도 다른 키를 누른 후 스페이스바가 놓이기 때문입니다. 하지만 두 기능 모두 꺼져 있습니다. 그리고 그것은 단지 스페이스바가 아닙니다. 새 키를 누르는 즉시 누르고 있던 키가 해제됩니다. 필터 키는 제가 방지하려는 작업을 정확하게 수행하지만 말하자면 '역방향 필터 키'는 없습니다. 이 하드웨어 제한을 극복하는 것이 가능합니까? 새 키를 누른 후에도 공간을 유지하고 있다는 의미에서 자동 핫키가 작동하도록 하려면 어떻게 해야 합니까?

답변1

이것은 오래되었지만 미래에 같은 문제가 있는 사람들에게 도움이 될 수 있습니다.

키의 물리적 상태를 확인하는 데 GetKeyState("Space")사용하는 대신GetKeyState("Space", "P")

답변2

스페이스바 다음에 다른 키를 누르면 GetKeyState는 더 이상 스페이스바를 캡처하지 않습니다. 이는 "A"를 길게 눌러 스팸 메시지를 보낸 다음 "A"를 놓지 않고 "B"를 길게 누르면 "aaaababab"이 아니라 "aaabbbbb"만 표시되는 것과 같습니다. 스페이스바를 누를 때 다른 키를 누르면 무엇을 하려는지 알 수 없지만(스팸 조합을 원할 수도 있습니까?) 달성하려는 것이 불가능하다고 생각합니다. .

관련 정보