Skip to content
Clive Galway edited this page Sep 20, 2016 · 4 revisions

IOClasses

IOClasses are classes that handle Input and Output (eg Keyboard, Mouse and Joystick buttons), and associated functionality.
Each IOClass handles functionality for a specific type of input / output. For example, the AHK_KBM_Input IOClass wraps AHK's Hotkey command (Providing Keyboard + Mouse button detection) and the AHK_vGen_Output IOClass wraps the vGen API which provides the functionality for driving virtual joysticks.

There are four types of IOClass - each class of IO may implement one or more of each type - for example, the AHK_KBM IOClass (Which handles Keyboard and Mouse IO) implements all of these IOClasses (As it supports Input, Output and Bind Mode), whereas the vGen IOClass (Which handles virtual joystick output) only implements the Output IOClass and the GuiControl IOClass.

GuiControl IOClasses

These handle GuiControl elements for this kind of IOClass. For example, the AHK_vGen_Output GuiControl IOClass handles creation of the menus that appear in the OutputAxis and OutputButton GuiControls which allow users to select a virtual joystick and one of it's axes or buttons.
All IOClasses will probably have a GuiControl IOClass.

Input IOClasses

These handle detection of input for that IOClass. For example, the AHK_KBM_Input Input IOClass handles detection of Keyboard and Mouse input using the AHK Hotkey system.
Only IOClasses that are of an Input type will have an Input IOClass. For example, a AHK_vGen_Output IOClass will not have an Input IOClass as it is an Output only IOType.

Output IOClasses

These handle sending of output for that IOClass. For example, the AHK_vGen_Output Output IOClass knows how to send send output to the vGen API in order to drive virtual joysticks.
Only IOClasses that are of an Output type will have an Output IOClass. For example, a AHK_Joy_Input IOClass will not have an Output IOClass as AHK cannot "Send" output to a physical stick.

BindMode IOClasses

BindMode IOClasses handle "Bind Mode" for a given IOClass. That is, if the end-user can make a binding by pressing the desired input, then it needs a BindMode IOClass.