아래에 세 가지 접근법이 있습니다. 가장 쉬운 방법에서 시작하여 가장 복잡한 방법으로 끝납니다. 복잡한 방법은 광범위한 상황에 작동합니다 (예를 들어 키나 마우스 버튼을 누른 채로 있기를 요구하는 게임).
이 방법은 간단한 키눌림과 마우스 클릭을 전송합니다. 예를 들어:
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
완전한 키와 마우스/조이스틱 버튼에 대한 키 목록을 참조하십시오.
이 방법은 조이스틱 버튼을 누르고 있는 동안 키나 마우스 버튼이 반드시 눌려 있어야 하는 경우에 필수입니다. 다음 예제는 조이스틱의 두 번째 버튼이 왼쪽 화살표 키가 되도록 만듭니다:
Joy2:: Send {Left down} ; 왼쪽 화살표 키를 누릅니다. KeyWait Joy2 ; 사용자가 조이스틱 버튼을 뗄 때까지 기다립니다. Send {Left up} ; 왼쪽 화살표 키를 뗍니다. return
이 방법은 방법 #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의 움직임에 반응하도록 만들려면, SetTimer과 GetKeyState()를 사용하십시오.
다음 예제는 조이스틱의 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
다음 예제는 조이스틱의 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와 같은 키워드 검색이면 흥미로운 주제들을 얻을 수 있습니다.