SendInput()键盘字母C / C ++

我正在尝试使用SendInput()将句子发送到另一个应用程序(记事本),然后将其发送到Enter键。

任何代码片段? 或者帮忙

 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)); 

虚拟密钥代码列表 …..

SendInput函数接受INPUT结构数组。 INPUT结构可以是鼠标或键盘事件。 键盘事件结构有一个名为wVk的成员,它可以是键盘上的任何键。 Winuser.h头文件为每个键提供宏定义(VK_ *)。

这里有一个简单的C ++示例http://nibuthomas.wordpress.com/2009/08/04/how-to-use-sendinput/

这里有一个更完整的VB示例http://vb.mvps.org/samples/SendInput/

我在阅读@Nathan的代码, 这个引用并结合@ jave.web的建议后做了一个修改。 此代码可用于输入字符(大写和小写)。

 #define WINVER 0x0500 #include 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)); } 

以下是按Return键的function:

  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)); }