我正在尝试使用SendInput()
将句子发送到另一个应用程序(记事本),然后将其发送到 Enter 键。
任何代码段?或者帮助
答案 0 :(得分:7)
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));
答案 1 :(得分:1)
SendInput函数接受INPUT结构数组。 INPUT结构可以是鼠标或键盘事件。 keyboard event structure有一个名为wVk的成员,它可以是键盘上的任何键。 Winuser.h头文件为每个键提供宏定义(VK_ *)。
答案 2 :(得分:1)
我在阅读@ Nathan的代码this reference并结合@ jave.web的建议后做了一些修改。此代码可用于输入字符(大写和小写)。
#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));
}
下面是按Return键的功能:
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));
}
答案 3 :(得分:0)
这里有一个简单的C ++示例http://nibuthomas.wordpress.com/2009/08/04/how-to-use-sendinput/
这里有一个更完整的VB示例http://vb.mvps.org/samples/SendInput/