Sometimes you may want to simulate key strokes as input to one of your web pages or another window. This might be just to enter some simple text, or it might be to control the application in some way (using the control keys or arrow keys, for example.) Badboy makes it easy to do this using the "Keys" Item.
Adding a Keys Item
Adding a Keys Item is easy: just drag it from the Toolbox to the place in your Script where you would like it to go. The figure below shows how a Keys item looks in your Script:

When you add a Keys Item, the Keys property dialog will open. Here you can type the text for key strokes you would like to be sent and configure other options for how and when the key strokes should be simulated.

Window Focus
When the Keys item is played, Badboy will send key strokes matching the text you have entered to whichever window has the focus. In order to ensure your key strokes go to the right window, you will want to ensure somehow that the window you intend has the focus when the Keys item is played. One simple way to do this is to use a Mouse Click item which clicks in the target window prior to the Keys item executing.
Sometimes the window that you want to send key strokes to is a modal window that blocks Badboy from playing or any other window from taking focus. When these are invoked or created by actions in the Badboy script it is possible that by the time the required window has become visible the Badboy script is paused and cannot continue on to play your Keys Item. To deal with this problem you can configure your Keys Item to play before the item that causes the dialog to show, but to run "in the background". This means that when the Keys Item plays it doesn't send the key strokes immediately - instead, it allows the Badboy script to keep playing and then sends them later on once the required window is visible. You can set the criteria for when the key strokes will be sent in the options pane at the bottom of the Keys item configuration dialog (see above). Note that for this process to work you must place the Keys Item in the script prior to the item that shows the modal dialog that you want to send key strokes to. The diagram below shows how this might look:

Sending Special Characters
If you want to send non-textual keys (for example, Ctrl keys, function keys or the Enter key), you can do this using Virtual Key Codes. Virtual Key Codes are special names for keys which describe the keys. You can include a Virtual Key Code in your Keys item by entering the Virtual Key Code surrounded by curly braces. For example, to send the 'HOME' key on your keyboard you could enter '{VK_HOME}'. You can embed this in text, if you like, for example: 'Tree frogs {VK_HOME} are green'.
The table at the end of this section shows the virtual keys supported by Badboy.
Key Combinations
Sometimes you may want to send a combination of keys all pressed together. For example, you might want to send the "Alt" key plus the "F4" key to simulate closing an application. For such a case you need to send the F4 key inbetween the "down" and the "up" action for the "Alt" key. You can do this by adding the modifiers ":UP" and ":DOWN" to the virtual keys in the table above.
For, example, to send "Alt-F4", you could use:
{VK_MENU:DOWN}{VK_F4}{VK_MENU:UP}
This would cause whichever window had the focus to attempt to close. Note that the Alt key corresponds to the VK_MENU virtual keycode.
Virtual Key Table
| Virtual Key Codes |
| VK_LBUTTON |
| VK_RBUTTON |
| VK_CANCEL |
| VK_MBUTTON |
| VK_XBUTTON1 |
| VK_XBUTTON2 |
| VK_BACK |
| VK_TAB |
| VK_CLEAR |
| VK_RETURN |
| VK_SHIFT |
| VK_CONTROL |
| VK_MENU |
| VK_PAUSE |
| VK_CAPITAL |
| VK_KANA |
| VK_HANGUEL |
| VK_HANGUL |
| VK_JUNJA |
| VK_FINAL |
| VK_HANJA |
| VK_KANJI |
| VK_ESCAPE |
| VK_CONVERT |
| VK_NONCONVERT |
| VK_ACCEPT |
| VK_MODECHANGE |
| VK_SPACE |
| VK_PRIOR |
| VK_NEXT |
| VK_END |
| VK_HOME |
| VK_LEFT |
| VK_UP |
| VK_RIGHT |
| VK_DOWN |
| VK_SELECT |
| VK_PRINT |
| VK_EXECUTE |
| VK_SNAPSHOT |
| VK_INSERT |
| VK_DELETE |
| VK_HELP |
| VK_LWIN |
| VK_RWIN |
| VK_APPS |
| VK_SLEEP |
| VK_NUMPAD0 |
| VK_NUMPAD1 |
| VK_NUMPAD2 |
| VK_NUMPAD3 |
| VK_NUMPAD4 |
| VK_NUMPAD5 |
| VK_NUMPAD6 |
| VK_NUMPAD7 |
| VK_NUMPAD8 |
| VK_NUMPAD9 |
| VK_MULTIPLY |
| VK_ADD |
| VK_SEPARATOR |
| VK_SUBTRACT |
| VK_DECIMAL |
| VK_DIVIDE |
| VK_F1 |
| VK_F2 |
| VK_F3 |
| VK_F4 |
| VK_F5 |
| VK_F6 |
| VK_F7 |
| VK_F8 |
| VK_F9 |
| VK_F10 |
| VK_F11 |
| VK_F12 |
| VK_F13 |
| VK_F14 |
| VK_F15 |
| VK_F16 |
| VK_F17 |
| VK_F18 |
| VK_F19 |
| VK_F20 |
| VK_F21 |
| VK_F22 |
| VK_F23 |
| VK_F24 |
| VK_NUMLOCK |
| VK_SCROLL |
| VK_LSHIFT |
| VK_RSHIFT |
| VK_LCONTROL |
| VK_RCONTROL |
| VK_LMENU |
| VK_RMENU |
| VK_BROWSER_BACK |
| VK_BROWSER_FORWARD |
| VK_BROWSER_REFRESH |
| VK_BROWSER_STOP |
| VK_BROWSER_SEARCH |
| VK_BROWSER_FAVORITES |
| VK_BROWSER_HOME |
| VK_VOLUME_MUTE |
| VK_VOLUME_DOWN |
| VK_VOLUME_UP |
| VK_MEDIA_NEXT_TRACK |
| VK_MEDIA_PREV_TRACK |
| VK_MEDIA_STOP |
| VK_MEDIA_PLAY_PAUSE |
| VK_LAUNCH_MAIL |
| VK_LAUNCH_MEDIA_SELECT |
| VK_LAUNCH_APP1 |
| VK_LAUNCH_APP2 |
| VK_OEM_1 |
| VK_OEM_PLUS |
| VK_OEM_COMMA |
| VK_OEM_MINUS |
| VK_OEM_PERIOD |
| VK_OEM_2 |
| VK_OEM_3 |
| VK_OEM_4 |
| VK_OEM_5 |
| VK_OEM_6 |
| VK_OEM_7 |
| VK_OEM_8 |
| VK_OEM_102 |
| VK_PROCESSKEY |
| VK_PACKET |
| VK_ATTN |
| VK_CRSEL |
| VK_EXSEL |
| VK_EREOF |
| VK_PLAY |
| VK_ZOOM |
| VK_NONAME |
| VK_PA1 |
| VK_OEM_CLEAR |