Basically, it's a game.
The goal is to be faster than the computer.
While Send or SendRaw is in play, you want to type as fast as possible in order to introduce interspersed characters.
Good luck.
Press F2 to start.
< Game keys >
action0-9, a-z, Shift, Enter, SpacerestartF11quitF12
Warning: Be sure to play this game in a safe area (e.g., Notepad).
; only required in training mode or on long missions #MaxHotkeysPerInterval 1000 F2:: Send( "Hello, World! How are you? Hello, World! How are you?", false ) return F11:: Reload F12:: ExitApp Send( p_data, p_send=true, p_buffer=false ) { static key_buffer, hk_list Gosub, EnableBufferedInput ; disable to leave training mode SetKeyDelay, 200 if ( p_send ) Send, %p_data% else SendRaw, %p_data% if ( p_buffer ) StringTrimLeft, key_buffer, key_buffer, StrLen( p_data ) ; ensure buffered input is captured Sleep, -1 if key_buffer!= Send( key_buffer, true, true ) Gosub, DisableBufferedInput return hk_CaptureBufferedInput: Critical StringReplace, key, A_ThisHotkey, $* StringReplace, key, key, vk10 up, Shift up StringReplace, key, key, vk10, Shift down key_buffer = %key_buffer%{%key%} return EnableBufferedInput: if hk_list= { old_FormatInteger := A_FormatInteger SetFormat, Integer, Hex hk_list = $*vkD ; Enter hk_list = %hk_list%|$*vk10 ; Shift hk_list = %hk_list%|$*vk20 ; Space ix_b = 0x30 ; 0 ix_e = 0x39 ; 9 loop, % ix_e-ix_b+1 hk_list := hk_list "|$*vk" ix_b+A_Index-1 ix_b = 0x41 ; a ix_e = 0x5A ; z loop, % ix_e-ix_b+1 hk_list := hk_list "|$*vk" ix_b+A_Index-1 StringReplace, hk_list, hk_list, 0x,, All SetFormat, Integer, %old_FormatInteger% } loop, Parse, hk_list, | { Hotkey, %A_LoopField%, hk_CaptureBufferedInput, on Hotkey, %A_LoopField% up, hk_CaptureBufferedInput, on } return DisableBufferedInput: loop, Parse, hk_list, | { Hotkey, %A_LoopField%, off Hotkey, %A_LoopField% up, off } return }