The InputRemapper library allows the monitoring of key/mouse button combinations.
When such a predefined combo occurs it converts them to some other combo.
For example it detects "LShift+A", suppresses it so it never arrives to whatever
application is in focus then creates a fake "LControl+B" instead.
- The library should work with a C# WPF project.
- Should be easy to extend so later on support for other input types can be
added (like joystick buttons and axes).
- Performance is important since it will constantly run in the background.
- Well commented and documented.
- Any number of "input combo - output combo" pairs can be defined.
- A detected input combo also fires related events: "Pressed" and "Released".
- For example pressing "LShift+A" calls Foo(), releasing calls Bar(), pressing
"LShift+B" calls Loki(), releasing calls Asd() and so on.
- The output combo can be empty in which case only the input combo's events are
fired without any fake keys created.
- The pressed or released (up and down) states of the input combo is exactly
mimicked by the output combo.
- Suppression of the input combo can be disabled.
- The detection's behavior for each input combo can be configured to...
...run only when any key or button has just been pressed.
...run only when any key or button has just been released.
...run on both presses and releases.
- All keyboard keys are supported including media keys.
- There are "umbrella" key definitions for sided keys. For instance "LShift"
means the left shift key, "RShift" means the right one while "Shift" means any
- All mouse functions are supported including mouse wheel and mouse movement.
- Mouse movement can only be used as output. For example "CursorLeft" moves the
mouse 1 pixel to the left, "LShift+CursorLeft" moves it 10 pixels to the left.
- Double clicking is handled as four distinct events: (Pressed, released)x2
- The output combo is sent to whatever application is in focus.
- Only desktop programs are important, stuff using DirectInput and such are not.
- Only Windows 7 support is expected.