Joystick Test Script

Auto Hotkey

Joystick Test Script

This script helps determine the button numbers and other attributes of your joystick. It might also reveal if your joystick is in need of calibration; that is, whether the range of motion of each of its axes is from 0 to 100 percent as it should be. If calibration is needed, use the operating system's control panel or the software that came with your joystick.

Download This Script  |  Other Sample Scripts  |  Home

; July 16, 2016: Revised code for AHK v2 compatibility
; July 6, 2005 : Added auto-detection of joystick number.
; May 8, 2005  : Fixed: JoyAxes is no longer queried as a means of
; detecting whether the joystick is connected.  Some joysticks are
; gamepads and don't have even a single axis.

; If you want to unconditionally use a specific joystick number, change
; the following value from 0 to the number of the joystick (1-16).
; A value of 0 causes the joystick number to be auto-detected:
JoystickNumber := 0

; END OF CONFIG SECTION. Do not make changes below this point unless
; you wish to alter the basic functionality of the script.

; Auto-detect the joystick number if called for:
if JoystickNumber <= 0
{
    Loop 16  ; Query each joystick number to find out which ones exist.
    {
        GetKeyState, JoyName, %A_Index%JoyName
        if JoyName <> ""
        {
            JoystickNumber := A_Index
            break
        }
    }
    if JoystickNumber <= 0
    {
        MsgBox The system does not appear to have any joysticks.
        ExitApp
    }
}

#SingleInstance
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo
Loop
{
    buttons_down := ""
    Loop, joy_buttons
    {
        GetKeyState, joy%a_index%, %JoystickNumber%joy%a_index%
        if joy%a_index%
            buttons_down .= " " a_index
    }
    GetKeyState, joyx, %JoystickNumber%JoyX
    axis_info := "X" Round(joyx)
    GetKeyState, joyy, %JoystickNumber%JoyY
    axis_info .= "  Y" Round(joyy)
    if InStr(joy_info, "Z")
    {
        GetKeyState, joyz, %JoystickNumber%JoyZ
        axis_info .= "  Z" Round(joyz)
    }
    if InStr(joy_info, "R")
    {
        GetKeyState, joyr, %JoystickNumber%JoyR
        axis_info .= "  R" Round(joyr)
    }
    if InStr(joy_info, "U")
    {
        GetKeyState, joyu, %JoystickNumber%JoyU
        axis_info .= "  U" Round(joyu)
    }
    if InStr(joy_info, "V")
    {
        GetKeyState, joyv, %JoystickNumber%JoyV
        axis_info .= "  V" Round(joyv)
    }
    if InStr(joy_info, "P")
    {
        GetKeyState, joyp, %JoystickNumber%JoyPOV
        axis_info .= "  POV" Round(joyp)
    }
    ToolTip, %joy_name% (#%JoystickNumber%):`n%axis_info%`nButtons Down: %buttons_down%`n`n(right-click the tray icon to exit)
    Sleep, 100
}
return