조이스틱을 마우스처럼 사용하기
이 스크립트는 조이스틱을 세 버튼 마우스로 변신시킵니다. 각 버튼을 마치 마우스 버튼 처럼 끌 수 있고 사실상 CPU 시간을 소비하지 않습니다. 또한, 조이스틱을 중앙으로부터 멀리 밀수록 커서를 더 빨리 이동시킵니다. 다양한 설정은 스크립트 상단에서 기호에 맞게 재단할 수 있습니다.
이 스크립트 내려받기 | 다른 샘플 스크립트 | 홈으로
; 마우스 커서를 더 빨리 이동시키려면 다음 값을 증가시키면 됩니다: JoyMultiplier = 0.30 ; 다음 값을 줄이면 조이스틱 중앙으로부터 좀 덜 밀어도 ; 마우스를 이동시키기 시작할 수 있습니다. 그렇지만, 조이스틱 눈금 조정이 필요할 수 있습니다. ; -- 적절히 중앙에 정렬되었는지 확인해야 해야 -- 커서가 표류하는 것을 피할 수 있스니다. ; 완벽하게 빈틈 없이 중앙 정렬된 조이스틱은 값 1을 사용할 수 있습니다: JoyThreshold = 3 ; 다음을 true로 바꾸면 Y-축을 뒤집을 수 있습니다. ; 그러면 마우스는 조이스틱의 수직 반대 방향으로 이동합니다: InvertYAxis := false ; 다음 값들을 바꾸면 조이스틱 버튼 번호를 왼쪽, 오른쪽, 그리고 가운데 마우스 버튼에 대하여 ; 1, 2, 그리고 3 말고 다른 값을 사용할 수 있습니다. 가능한 값은 1부터 32까지입니다. ; 조이스틱 테스트 스크립트를 사용하면 조이스틱 번호를 더 쉽게 알아낼 수 있습니다. ButtonLeft = 1 ButtonRight = 2 ButtonMiddle = 3 ; 조이스틱에 POV 콘트롤이 있다면, 그것을 마우스 휠로 사용할 수 있습니다. ; 다음 값은 휠의 회전 사이의 밀리초의 개수입니다. ; 개수를 줄이면 휠이 더 빨리 회전합니다: WheelDelay = 250 ; 조이스틱이 여러 개이면, 이 값을 증가시켜 ; 다른 조이스틱을 사용할 수 있습니다: JoystickNumber = 1 ; END OF CONFIG SECTION -- 이 시점 아래로 아무 것도 변경하지 마십시오. ; 단, 스크립트의 기본 기능을 변경하고 싶은 경우는 예외입니다. #SingleInstance JoystickPrefix = %JoystickNumber%Joy Hotkey, %JoystickPrefix%%ButtonLeft%, ButtonLeft Hotkey, %JoystickPrefix%%ButtonRight%, ButtonRight Hotkey, %JoystickPrefix%%ButtonMiddle%, ButtonMiddle ; 마우스 이동을 시작시키는데 필요한 축의 이격을 계산합니다: JoyThresholdUpper := 50 + JoyThreshold JoyThresholdLower := 50 - JoyThreshold if InvertYAxis YAxisMultiplier = -1 else YAxisMultiplier = 1 SetTimer, WatchJoystick, 10 ; 조이스틱의 이동을 관제합니다. GetKeyState, JoyInfo, %JoystickNumber%JoyInfo IfInString, JoyInfo, P ; 조이스틱에 POV 콘트롤이 있습니다. 그래서 그것을 마우스 휠로 사용합니다. SetTimer, MouseWheel, %WheelDelay% return ; 자동 실행 섹션의 끝. ; 아래의 서브루틴은 KeyWait를 사용하지 않습니다. ; 왜냐하면 종종 버튼-업-대기 쓰레드 아래의 WatchJoystick 의사-쓰레드를 가로 채고, ; 그러면 조이스틱으로 마우스 끌기를 방해하는 효과가 있기 때문입니다. ButtonLeft: SetMouseDelay, -1 ; 더 부드럽게 이동하도록 만듭니다. MouseClick, left,,, 1, 0, D ; 왼쪽 마우스 버튼을 누르고 있습니다. SetTimer, WaitForLeftButtonUp, 10 return ButtonRight: SetMouseDelay, -1 ; 더 부드럽게 이동하도록 만듭니다. MouseClick, right,,, 1, 0, D ; 오른쪽 마우스 버튼을 누르고 있습니다. SetTimer, WaitForRightButtonUp, 10 return ButtonMiddle: SetMouseDelay, -1 ; 더 부드럽게 이동하도록 만듭니다. MouseClick, middle,,, 1, 0, D ; 오른쪽 마우스 버튼을 누르고 있습니다. SetTimer, WaitForMiddleButtonUp, 10 return WaitForLeftButtonUp: if GetKeyState(JoystickPrefix . ButtonLeft) return ; 버튼이 여전히 눌려 있습니다. 그래서 계속 대기합니다. ; 그렇지 않으면, 버튼이 떼어졌습니다. SetTimer, WaitForLeftButtonUp, off SetMouseDelay, -1 ; 더 부드럽게 이동하도록 만듭니다. MouseClick, left,,, 1, 0, U ; 마우스 버튼을 뗍니다. return WaitForRightButtonUp: if GetKeyState(JoystickPrefix . ButtonRight) return ; 버튼이 여전히 눌려 있습니다. 그래서 계속 기다립니다. ; 그렇지 않으면, 버튼이 떼어졌습니다. SetTimer, WaitForRightButtonUp, off MouseClick, right,,, 1, 0, U ; 마우스 버튼을 뗍니다. return WaitForMiddleButtonUp: if GetKeyState(JoystickPrefix . ButtonMiddle) return ; 버튼이 여전히 눌려 있습니다. 그래서 계속 기다립니다. ; 그렇지 않으면, 버튼이 떼어졌습니다. SetTimer, WaitForMiddleButtonUp, off MouseClick, middle,,, 1, 0, U ; 마우스 버튼을 뗍니다. return WatchJoystick: MouseNeedsToBeMoved := false ; 기본값을 설정합니다. SetFormat, float, 03 GetKeyState, joyx, %JoystickNumber%JoyX GetKeyState, joyy, %JoystickNumber%JoyY if joyx > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdUpper } else if joyx < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdLower } else DeltaX = 0 if joyy > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdUpper } else if joyy < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdLower } else DeltaY = 0 if MouseNeedsToBeMoved { SetMouseDelay, -1 ; 더 부드럽게 이동시킵니다. MouseMove, DeltaX * JoyMultiplier, DeltaY * JoyMultiplier * YAxisMultiplier, 0, R } return MouseWheel: GetKeyState, JoyPOV, %JoystickNumber%JoyPOV if JoyPOV = -1 ; 각도 없음. return if (JoyPOV > 31500 or JoyPOV < 4500) ; 앞으로 이동 Send {WheelUp} else if JoyPOV between 13500 and 22500 ; 뒤로 이동 Send {WheelDown} return