조이스틱을 키보드나 마우스에 리맵하기

목차

중요한 고지 사항

조이스틱 버튼이 키눌림이나 마우스 클릭을 전송하게 만들기

Different Approaches

아래에 세 가지 접근법이 있습니다. 가장 쉬운 방법에서 시작하여 가장 복잡한 방법으로 끝납니다. 복잡한 방법은 광범위한 상황에 작동합니다 (예를 들어 키나 마우스 버튼을 누른 채로 있기를 요구하는 게임).

방법 #1

이 방법은 간단한 키눌림과 마우스 클릭을 전송합니다. 예를 들어:

Joy1::Send {Left}  ; 버튼 #1이 왼쪽 화살표 키 눌림을 전송하도록 만듭니다.
Joy2::Click  ; 버튼 #2가 왼쪽 마우스 버튼 클릭을 전송하도록 만듭니다.
Joy3::Send a{Esc}{Space}{Enter}  ; 버튼 #3이 기호 "a" 와 다음에 피신 문자, 스페이스, 그리고 엔터를 전송하도록 만듭니다.
Joy4::Send Sincerely,{Enter}John Smith  ; 버튼 #4가 두 줄의 서명을 보내도록 만듭니다.

버튼에게 하나 이상의 명령어를 수행하도록 만들려면, 첫 명령어를 버튼 이름 아래에 두고 마지막 명령어를 return으로 만들면 됩니다. 예를 들어:

Joy5::
Run Notepad
WinWait Untitled - Notepad
WinActivate
Send 이 텍스트는 노트패드에 나타납니다.{Enter}
return

완전한 키와 마우스/조이스틱 버튼에 대한 키 목록을 참조하십시오.

방법 #2

이 방법은 조이스틱 버튼을 누르고 있는 동안 키나 마우스 버튼이 반드시 눌려 있어야 하는 경우에 필수입니다. 다음 예제는 조이스틱의 두 번째 버튼이 왼쪽 화살표 키가 되도록 만듭니다:

Joy2::
Send {Left down}  ; 왼쪽 화살표 키를 누릅니다.
KeyWait Joy2  ; 사용자가 조이스틱 버튼을 뗄 때까지 기다립니다.
Send {Left up}  ; 왼쪽 화살표 키를 뗍니다.
return

방법 #3

이 방법은 방법 #2에 기술된 유형의 조이스틱 핫키가 하나 이상 있고, 종종 그런 핫키를 동시에 누르고 떼어야 할 경우에 필수입니다. 다음 예제는 조이스틱의 세번째 버튼이 왼쪽 마우스 버튼이 되도록 만듭니다:

Joy3::
Send {LButton down}   ; 왼쪽 마우스 버튼을 누르고 있습니다.
SetTimer, WaitForButtonUp3, 10
return

WaitForButtonUp3:
if GetKeyState("Joy3")  ; 버튼이 여전히 눌려 있습니다. 그래서 계속 대기합니다.
    return
; 그렇지 않으면, 버튼이 떼어졌습니다.
Send {LButton up}  ; 왼쪽 마우스 버튼을 뗍니다.
SetTimer, WaitForButtonUp3, Off
return

자동-반복 키눌림

어떤 프로그램이나 게임은 (마치 키보드를 계속 누른 채로 있는 것처럼) 키가 반복적으로 전송되기를 요구합니다. 다음 예제는 조이스틱의 두 번째 버튼을 누르고 있는 동안 스페이스바 키눌림을 반복적으로 전송합니다:

Joy2::
Send {Space down}   ; 스페이바를 누릅니다.
SetTimer, WaitForJoy2, 30  ; 번호를 30에서 20이나 10으로 줄여 더 빠르게 키를 전송합니다. 더 증가시키면 더 느리게 전송됩니다.
return

WaitForJoy2:
if not GetKeyState("Joy2")  ; 버튼을 뗐습니다.
{
    Send {Space up}  ; 스페이스바를 뗍니다.
    SetTimer, WaitForJoy2, Off  ; 버튼 관제를 멈춥니다.
    return
}
; 위는 "반환되지 않았기 때문에", 버튼은 여전히 눌린 채로 있습니다.
Send {Space down}  ; 또다른 스페이스바 키눌림을 전송합니다.
return

문맥-감지 조이스틱 버튼

지시어 #IfWinActive/Exist를 사용하면 선택된 조이스틱 버튼이 활성화 상태 또는 존재하는 창의 종류에 따라 다른 행위를 수행하도록 (또는 전혀 못하도록) 만들 수 있습니다.

조이스틱을 마우스처럼 사용하기

Joystick-To-Mouse 스크립트는 조이스틱을 그의 버튼과 축 콘트롤을 리맵핑하여 마우스로 탈바꿈시킵니다.

Making Other Joystick Controls Send Keystrokes or Mouse Clicks

스크립트가 조이스틱 축이나 POV hat의 움직임에 반응하도록 만들려면, SetTimerGetKeyState()를 사용하십시오.

Joystick Axes

다음 예제는 조이스틱의 X와 Y 축을 마치 키보드 위의 화살표 키 군처럼 행위하게 만듭니다 (상하좌우):

#Persistent  ; 스크립트를 사용자가 명시적으로 종료할 때까지 실행합니다.
SetTimer, WatchAxis, 5
return

WatchAxis:
JoyX := GetKeyState("JoyX")  ; X 축의 위치를 얻습니다.
JoyY := GetKeyState("JoyY")  ; Y 축의 위치를 얻습니다.
KeyToHoldDownPrev := KeyToHoldDown  ; Prev는 이제 이전에 놀린 키를 (있다면) 보유합니다.

if (JoyX > 70)
    KeyToHoldDown := "Right"
else if (JoyX < 30)
    KeyToHoldDown := "Left"
else if (JoyY > 70)
    KeyToHoldDown := "Down"
else if (JoyY < 30)
    KeyToHoldDown := "Up"
else
    KeyToHoldDown := ""

if (KeyToHoldDown = KeyToHoldDownPrev)  ; 올바른 키가 이미 눌려 있습니다 (또는 아무 키도 필요하지 않습니다).
    return  ; 아무것도 하지 않습니다.

; 그렇지 않으면, 이전의 키를 떼고 새로운 키를 누릅니다:
SetKeyDelay -1  ; 키눌림 사이에 지연을 피합니다.
if KeyToHoldDownPrev   ; 떼야 할 이전의 키가 있습니다.
    Send, {%KeyToHoldDownPrev% up}  ; 그 키를 뗍니다.
if KeyToHoldDown   ; 누를 키가 있습니다.
    Send, {%KeyToHoldDown% down}  ; 그 키를 누릅니다.
return

Joystick POV Hat

다음 예제는 조이스틱의 POV hat이 마치 키보드의 화살표 군처럼 행위하게 만듭니다; 즉, POV hat은 화살표 키눌림을 전송합니다 (상하좌우):

#Persistent  ; 스크립트를 사용자가 명시적으로 종료할 때까지 실행합니다.
SetTimer, WatchPOV, 5
return

WatchPOV:
POV := GetKeyState("JoyPOV")  ; POV 콘트롤의 위치를 얻습니다.
KeyToHoldDownPrev := KeyToHoldDown  ; Prev는 이제 이전에 놀린 키를 (있다면) 보유합니다.

; 어떤 조이스틱은 고정 증가되지 않고 부드러운/연속적인 POV를 가집니다.
; 그들 모두를 지원하려면, 범위를 사용하십시오:
if (POV < 0)   ; 보고할 각도가 없습니다
    KeyToHoldDown := ""
else if (POV > 31500)               ; 315 도부터 360 도까지: 앞으로
    KeyToHoldDown := "Up"
else if POV between 0 and 4500      ; 0 도부터 45 도까지: 앞으로
    KeyToHoldDown := "Up"
else if POV between 4501 and 13500  ; 45 도부터 135 도까지: 오른쪽으로
    KeyToHoldDown := "Right"
else if POV between 13501 and 22500 ; 135 도부터 225 도까지: 아랫쪽으로
    KeyToHoldDown := "Down"
else                                ; 225 도부터 315 도까지: 왼쪽으로
    KeyToHoldDown := "Left"

if (KeyToHoldDown = KeyToHoldDownPrev)  ; 올바른 키가 이미 눌려 있습니다 (또는 아무 키도 필요하지 않습니다).
    return  ; 아무것도 하지 않습니다.

; 그렇지 않으면, 이전의 키를 떼고 새로운 키를 누릅니다:
SetKeyDelay -1  ; 키눌림 사이에 지연을 피합니다.
if KeyToHoldDownPrev   ; 떼야 할 이전의 키가 있습니다.
    Send, {%KeyToHoldDownPrev% up}  ; 그 키를 뗍니다.
if KeyToHoldDown   ; 누를 키가 있습니다.
    Send, {%KeyToHoldDown% down}  ; 그 키를 누릅니다.
return

자동-반복 키눌림

두 예제 모두 단순히 키를 누르고 있는게 아니라 키를 반복적으로 전송하도록 변경할 수 있습니다 (즉, 키보드에서 물리적으로 키를 누르고 있는 것처럼 흉내낼 수 있습니다). 이렇게 하려면, 다음 줄을:

return  ; 아무것도 하지 않습니다.

With the following:

{
    if KeyToHoldDown
        Send, {%KeyToHoldDown% down}  ; 키눌림을 자동으로 반복합니다.
    return
}

논평

첫 번째 말고 다른 조이스틱을 사용할 수 있습니다. 버튼 이름이나 축 이름 앞에 조이스틱 버튼 번호를 주면 됩니다. 예를 들어, 2Joy1은 두 번째 조이스틱의 첫 번째 버튼입니다.

다른 유용한 조이스틱 스크립트를 발굴하려면 AutoHotkey 포럼을 방문하십시오. Joystick and GetKeyState and Send와 같은 키워드 검색이면 흥미로운 주제들을 얻을 수 있습니다.