CKeystrokeEngine'�Sending Keystrokes to a Selected Window
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
CKeystrokeEngineshould wait in between each key press when sending keystrokes. On some faster machines,CKeystrokeEnginemay 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
bSendToWndis true,CKeystrokeEnginesends 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
lpszTitleis set to NULL,CKeystrokeEnginedoes 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
lpszClassis set to NULL,CKeystrokeEnginedoes 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,
CKeystrokeEnginewill 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,
CKeystrokeEngineautomatically re-activates the window whenever it loses focus. If 0 seconds is entered, the window is immediately activated when it loses focus. Otherwise,CKeystrokeEnginewaits 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
CKeystrokeEnginein your applications, copyKeystrokeEngine.cpp,KeystrokeEngine.h,WindowEngine.cpp, andWindowEngine.hinto your project and includeKeystrokeEngine.hin 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 emindemirhan@yahoo.com.
Downloads
Download demo project - 103 KbDownload demo executable - 35 Kb
Download source - 10 Kb

Comments
DPaqqo mP pJ aMk YLXJ QB
Posted by UjteGFfRNy on 02/14/2013 03:46ambuy cialis online generic cialis daily use - cialis under tongue
ReplyhrmHR oAr wJDF
Posted by uWfwcRzEoM on 11/15/2012 12:32ambuy soma generic where can i buy somanabolic muscle maximizer - carisoprodol prodrug
ReplyProbably you forgot an easy function...
Posted by laisan86 on 06/10/2004 02:04amThanks a lot
Posted by Legacy on 02/18/2004 12:00amOriginally posted by: stevechen
i am looking for a key map class, and found your keyengine is the best one, thanks a lot.
ReplyPossible with vb.Net?
Posted by Legacy on 11/06/2003 12:00amOriginally posted by: onur orek
Is it possible to do the same thing using vb.Net (which MFC libraries one should include?)
Replyregards
onur orek
mine is not working
Posted by Legacy on 08/14/2003 12:00amOriginally posted by: Guilherme
I'm new in MFC. Could a good guy send me a source of a simple program to send keys to notepad?
tnks
Guilherme - Brazil
ReplyWeird Bug
Posted by Legacy on 08/04/2003 12:00amOriginally posted by: Brandon
For some reason its activating Microsoft Excel? This is weird.
Let me further explain... I was testing its ability to send keystrokes to a DirectX window so I used EverQuest IM aka EQIM(the first DX programing I found on my computer). I sent a simple "test" not even using an <ENTER> and it was activating microsoft excel.
Windows 2000 Professional OS
ReplyDoesn't work under WinXP
Posted by Legacy on 07/07/2003 12:00amOriginally posted by: Licu Pliciu
It works fine under Win98 SE but under XP it just focuses the target window and then nothing.
ReplyNo Title
Posted by Legacy on 07/05/2003 12:00amOriginally posted by: Muhammad Zahid
Mustafa's Article and software demo is extremely useful for those who are learning MFC. This demo is to the point and teaches exactly how a new programmer can capture keyboard commands into his program. Most of the books don't touch this area this way and students remain unsure of how to communicate with the window they create in Visual C++.
ReplyGreat Work by a knowledgable person.