JoyToKey is a System Utilities software developed by Mehdi. After our trial and test, the software is proved to be official, secure and free. Here is the official description for JoyToKey:
Edit by Marydown: JoyToKey enables you to control various windows applications (e.g. a web browser, games on the web, Microsoft Office, and various shortcuts for Windows or Photoshop) by using your favorite Joystick. Whenever you press joystick buttons and sticks, JoyToKey will convert the input into keyboard strokes and mouse movements so that the target application works as you pre-configured!
Features
Create multiple configuration files You can create multiple configuration files and switch them at any time. It also supports the association of config files with applications so that the config file switches automatically when the target application changes.
Assign multiple keys for each button For example, you can assign Alt+F4 for a button.
Mouse emulation You can also emulate mouse cursor movements, clicks and wheel rotation. If you have an analog stick, cursor movement speed can be accelerated based on the stick input level.
Automatic repeat of buttons or toggles Virtual joystick setting Even if you have only one joystick, you can configure joystick->key mapping for multiple virtual joysticks (e.g. one for Default mapping, another for registering shortcuts, and yet another for Mouse Control). And you can temporarily switch to those virtual joystick setting by pressing a physical joystick button.
What's New
What's new in version 5.0 (beta)?
Support for different key assignments based on analog stick input level. Support for different key assignments based on button-HOLD duration. Support for rotating key assignments. For example, the key assignment
changes like "A -> B -> A -> B -> A ..." is possible whenever the same button is pressed.
Enhanced auto-repeat key functionality. For example, the following definitions are newly possible: "1.5 repeats per second" "one repeat per 123.4 seconds" "auto-repeat only after 500 milli-seconds"
Added a comment field for each button definition. For example, you can record a memo like "This button is used for Jump".