I am trying to use SendInput() to send a sentence to another application (Notepad) and then send it hitting the Enter Key.
Any code snippets? Or help
INPUT input; WORD vkey = VK_F12; // see link below input.type = INPUT_KEYBOARD; input.ki.wScan = MapVirtualKey(vkey, MAPVK_VK_TO_VSC); input.ki.time = 0; input.ki.dwExtraInfo = 0; input.ki.wVk = vkey; input.ki.dwFlags = 0; // there is no KEYEVENTF_KEYDOWN SendInput(1, &input, sizeof(INPUT)); input.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, &input, sizeof(INPUT)); VkKeyScanEx( char, KeyboardLayout ) to put your "common" chars into this example :) ... input.ki.wVk = VkKeyScanEx('a',kbl); as for the KeyboardLayout the simpliest way is to load current window's keyboardLayout: HKL kbl = GetKeyboardLayout(0);I made a modification after reading @Nathan's code, this reference and combined with @jave.web's suggestion. This code can be used to input characters (both upper-case and lower-case).
#define WINVER 0x0500 #include<windows.h> void pressKeyB(char mK) { HKL kbl = GetKeyboardLayout(0); INPUT ip; ip.type = INPUT_KEYBOARD; ip.ki.time = 0; ip.ki.dwFlags = KEYEVENTF_UNICODE; if ((int)mK<65 || (int)mK>90) //for lowercase { ip.ki.wScan = 0; ip.ki.wVk = VkKeyScanEx( mK, kbl ); } else //for uppercase { ip.ki.wScan = mK; ip.ki.wVk = 0; } ip.ki.dwExtraInfo = 0; SendInput(1, &ip, sizeof(INPUT)); } Below is the function for pressing Return key:
void pressEnter() { INPUT ip; ip.type = INPUT_KEYBOARD; ip.ki.time = 0; ip.ki.dwFlags = KEYEVENTF_UNICODE; ip.ki.wScan = VK_RETURN; //VK_RETURN is the code of Return key ip.ki.wVk = 0; ip.ki.dwExtraInfo = 0; SendInput(1, &ip, sizeof(INPUT)); } if ((int)mK<65 && (int)mK>90), i.e. the char code, cast to an int, must be smaller than 65 and larger than 90 at the same time. I assume this must be an or, i.e. if ((int)mK<65 || (int)mK>90), to match special and small chars in the ASCII table, otherwise the condition is mutually exclusive and can never be metThe SendInput function accepts an array of INPUT structures. The INPUT structures can either be a mouse or keyboard event. The keyboard event structure has a member called wVk which can be any key on the keyboard. The Winuser.h header file provides macro definitions (VK_*) for each key.
Theres a simple C++ sample here http://nibuthomas.wordpress.com/2009/08/04/how-to-use-sendinput/
And a more complete VB sample here http://vb.mvps.org/samples/SendInput/