NumKeyPad

I opened up a USB numeric-keypad, like this one: and rewired the buttons into a Plasticine shape, like this:

//Note: Ignore the gyroscopes on this picture - I put them on for a later revamp of this prototype//

These buttons sit really nicely beneath the thumb and first two fingers.

then I used and really neat piece of software - [|AutoHotKey] this lets any remap input, so for example (if I was feeling naughty) I could remap the spacebar to perform ALT+F4

but it is not limited to this: is contains its own scripting language, so it is possible to do very advanced stuff:

For example, the following code creates a magnifier glass when the **NumPad '-'** key is pressed:

code
 * original by:   holomind
 * see more:      http://www.autohotkey.com/forum/topic11700.html

Width=80 Height=80

HotKey, NumPadSub   , Mag_On HotKey, NumPadSub up , Mag_Off

OnExit handle_exit

CoordMode, Mouse, Screen

SPI_GETMOUSESPEED = 0x70 SPI_SETMOUSESPEED = 0x71 SlowMouseSpeed = 6

zoom = 2 Gui, +AlwaysOnTop +Resize +ToolWindow -SysMenu +E0x00000020 MouseGetPos, start_x, start_y start_x -= Width/2 start_y -= Height/2 Gui, Show, w%Width% h%Height% x%start_x% y%start_y%, Magnifier WinGet MagnifierID, id ,Magnifier WinSet, Transparent, 254, Magnifier Gui, -Caption

GoSub Mag_Off

;retrieve the unique ID number (HWND/handle) of that window WinGet, PrintSourceID, id

hdd_frame := DllCall( "GetDC", UInt, PrintSourceID ) hdc_frame := DllCall( "GetDC", UInt, MagnifierID ) return



Mag_On: ; Retrieve the current speed so that it can be restored later: DllCall("SystemParametersInfo", UInt, SPI_GETMOUSESPEED, UInt, 0, UIntP, OrigMouseSpeed, UInt, 0)

; Now set the mouse to the slower speed specified in the ; next-to-last parameter (the range is 1-20, 10 is default): DllCall("SystemParametersInfo", UInt, SPI_SETMOUSESPEED, UInt, 0, UInt, SlowMouseSpeed, UInt, 0)

Gui, Show

SetTimer, MoveWin, 0 SetTimer, Repaint, 0

KeyWait NumPadSub ; This prevents keyboard auto-repeat from doing the DllCall repeatedly. return

Mag_Off: SetTimer, MoveWin, Off SetTimer, Repaint, Off

Gui, Show, Hide

; Restore the original speed. DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, UInt, OrigMouseSpeed, UInt, 0) return



Repaint: MouseGetPos, start_x, start_y WinGetPos, wx, wy, ww, wh, Magnifier

DllCall( "gdi32.dll\SetStretchBltMode", "uint", hdc_frame, "int", 0 ) ; No Antializing

DllCall("gdi32.dll\StretchBlt", UInt,hdc_frame, Int,0, Int,0, Int,ww, Int,wh        , UInt,hdd_frame, Int, start_x-(ww / 2 / zoom)          , Int,start_y -( wh / 2/zoom), Int,ww / zoom, Int,wh / zoom ,UInt,0xCC0020) ; SRCCOPY

Return



MoveWin: MouseGetPos, now_x, now_y now_x -= Width/2 now_y -= Height/2 WinMove, Magnifier,, %now_x%, %now_y% Return



GuiClose: handle_exit: DllCall("gdi32.dll\DeleteDC", UInt,hdc_frame ) DllCall("gdi32.dll\DeleteDC", UInt,hdd_frame ) ExitApp



!+WheelUp::        ; Alt+Shift+WheelUp to zoom in  If zoom != 16 zoom *= 2 Return

!+WheelDown::     ; Alt+Shift+WheelUp to zoom out If zoom != 2 zoom /= 2 Return code