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

이 스크립트는 조이스틱을 세 버튼 마우스로 변신시킵니다. 각 버튼을 마치 마우스 버튼 처럼 끌 수 있고 사실상 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
선택 | 내려받기