Introduction
CKeystrokeEngine
was originally written to allow users of my product, Macro Angel, to send keystrokes to the active window or to a selected window. Its functionality is similar to VB’s SendKeys
‘s functionality, but it allows more complex operations. In addition to sending keystrokes to the active window, by the help of CWindowEngine
, it can send keystrokes to only a specified window.
A simple CKeystrokeEngine
expression looks like this:
Hello World!<ENTER><REPEAT 10>I love open source<ENTER><END_REPEAT> Mustafa Demirhan
All special keys are put between ‘<‘ and ‘>’ characters. For example, to simulate an Enter key, you should use <ENTER>. Or, to press the Shift key, use <SHIFT>. Here are some more examples:
- To send Ctrl+A, use <CTRL>A.
- To send Alt+F4, use <ALT><F4>.
- To send Ctrl+Alt+Shift+A, use <CTRL+ALT+SHIFT>A.
- You also can use <CTRL+ALT>, <CTRL+SHIFT>, and <ALT+SHIFT>.
- To hold the Shift key and many other keys, use <SHIFT_LOCK>write your keys here<SHIFT_UNLOCK>.
- You also can use <ALT_LOCK>, <ALT_UNLOCK>, <CTRL_LOCK>, and <CTRL_UNLOCK>.
- To add a delay, use <DELAY xxx> where xxx is the amount of time in miliseconds. For example, <DELAY 1500> waits 1.5 seconds.
- To repeat a sequence of keys 100 times, use <REPEAT 100>you keys here<END_REPEAT>. Please note that nested repeats are not supported.
All other keys are listed in the sample application. Here are the public functions of CKeystrokeEngine
:
CKeystrokeEngine (const CString &sKeys); void SetPause (bool bPause, int nPause); void SetSendToWnd (bool bSendToWnd); // if lpszTitle == NULL, the feature is disabled void SetWndTitle (LPCSTR lpszTitle); // if lpszClass == NULL, the feature is disabled void SetWndClass (LPCSTR lpszClass); void SetExactMatch (bool bExact); void SetCaseSensitive (bool bCaseSensitive); void SetReActivate (bool bReactivate, int nMiliseconds); // Tadaaa. Here is the best function... bool SendKeys ();
SetPause (bool bPause, int nPause)
- Adjusts how much time
CKeystrokeEngine
should wait in between each key press when sending keystrokes. On some faster machines,CKeystrokeEngine
may type the keys too quickly, flooding the keyboard buffer and causing unpredictable results. Increasing this setting will prevent this from occurring. SetSendToWnd (bool bSendToWnd)
- If
bSendToWnd
is true,CKeystrokeEngine
sends all keystrokes to a specified window. By doing this, sending keystrokes to wrong windows is prevented. SetWndTitle (LPCSTR lpszTitle)
- Sets the window title to which the keystrokes will be sent. If
lpszTitle
is set to NULL,CKeystrokeEngine
does not searh for a window title. Note that this is effective only ifSetSendToWnd (true)
is used. SetWndClass (LPCSTR lpszClass)
- Sets the window class to which the keystrokes will be sent. If
lpszClass
is set to NULL,CKeystrokeEngine
does not search for a window class. Note that this is effective only ifSetSendToWnd (true)
is used. SetExactMatch (bool bExact)
- Specifies whether the Windows title entered is a partial title match or must match exactly. When set to false,
CKeystrokeEngine
will search for window titles that contain that text. Note that this is effective only ifSetSendToWnd (true)
is used. SetCaseSensitive (bool bCaseSensitive)
- If enabled, Window Title/Window Class and Text searches would be case sensitive. Note that this is effective only if
SetSendToWnd (true)
is used. SetReActivate (bool bReActivate, int nMiliseconds)
- If bReActivate is set to true,
CKeystrokeEngine
automatically re-activates the window whenever it loses focus. If 0 seconds is entered, the window is immediately activated when it loses focus. Otherwise,CKeystrokeEngine
waits for the specified amount of time and then re-activates the window. bool SendKeys ()
- Finally, this function sends the keys with the specifed options. Use this function to set all attributes of
CSendKeystrokes
.
If bSendToWnd
is set to false, the active window gets all of the keystrokes.
Adding a delay before re-activating windows prevents collisions between applications that are trying to send keystrokes at the same time.
Note that this is effective only if SetSendToWnd (true)
is used. Also, if bReActivate
is set to false and the specified window loses focus, the SendKeys ()
function returns false.
To get more information about the supported keywords, please use the sample application…
Some Points That You Should Keep in Mind
- To use
CKeystrokeEngine
in your applications, copyKeystrokeEngine.cpp
,KeystrokeEngine.h
,WindowEngine.cpp
, andWindowEngine.h
into your project and includeKeystrokeEngine.h
in your cpp file. - This class uses its own syntax instead of using VB’s
SendKeys ()
syntax. - If you have any suggestions, please let me know. My e-mail address is [email protected].
Downloads
Download demo project – 103 Kb
Download demo executable – 35 Kb
Download source – 10 Kb