조이스틱을 키보드나 마우스에 리맵하기
목차
중요한 고지 사항
- 모든 조이스틱 버튼이나 축을 키나 마우스 버튼이 되도록 리맵할 수는 있지만, 어떤 조이스틱 버튼이나 축은 리맵할 수 없습니다. 그럴 경우는 PPJoy 같은 조이스틱 에뮬레이터의 도움을 받아야만 합니다.
- 오토핫키는 조이스틱의 각 버튼을 1과 32 사이의 번호로 식별합니다. 이 번호를 결정하려면 조이스틱 테스트 스크립트를 사용하십시오.
조이스틱 버튼이 키눌림이나 마우스 클릭을 보내도록 만들기
아래에 세 가지 접근법이 있습니다. 가장 쉬운 방법에서 시작하여 가장 복잡한 방법으로 끝납니다. 복잡한 방법은 광범위한 상황에 작동합니다 (예를 들어 키나 마우스 버튼을 누른 채로 있기를 요구하는 게임).
방법 #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 스크립트는 조이스틱을 그의 버튼과 축 콘트롤을 리맵핑하여 마우스로 탈바꿈시킵니다.
조이스틱 축 또는 POV Hat이 키눌림이나 마우스 클릭을 전송하도록 만들기
스크립트가 조이스틱 축이나 POV hat의 움직임에 반응하도록 만들려면, SetTimer과 GetKeyState를 사용하십시오. 다음 예제는 조이스틱의 X와 Y 축을 마치 키보드 위의 화살표 키 군처럼 행위하게 만듭니다 (상하좌우):
#Persistent ; 스크립트를 사용자가 명시적으로 종료할 때까지 실행합니다. SetTimer, WatchAxis, 5 return WatchAxis: GetKeyState, JoyX, JoyX ; X 축의 위치를 얻습니다. GetKeyState, JoyY, 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
다음 예제는 조이스틱의 POV hat이 마치 키보드의 화살표 군처럼 행위하게 만듭니다; 즉, POV hat은 화살표 키눌림을 전송합니다 (상하좌우):
#Persistent ; 사용자가 명시적으로 종료할 때까지 스크립트를 계속 실행합니다. SetTimer, WatchPOV, 5 return WatchPOV: GetKeyState, POV, 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 ; 아무것도 하지 않습니다.
다음과 같이 교체하십시오:
{ if KeyToHoldDown Send, {%KeyToHoldDown% down} ; 키눌림을 자동으로 반복합니다. return }
논평
첫 번째 말고 다른 조이스틱을 사용할 수 있습니다. 버튼 이름이나 축 이름 앞에 조이스틱 버튼 번호를 주면 됩니다. 예를 들어, 2Joy1
은 두 번째 조이스틱의 첫 번째 버튼입니다.
다른 유용한 조이스틱 스크립트를 발굴하려면 AutoHotkey 포럼을 방문하십시오. Joystick and GetKeyState and Send와 같은 키워드 검색이면 흥미로운 주제들을 얻을 수 있습니다.
관련 주제
Joystick-To-Mouse 스크립트 (조이스틱을 마우스로 사용하기)
조이스틱 버튼, 축, 그리고 콘트롤 리스트
GetKeyState
키보드와 마우스 리맵핑하기