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

时间:2009-06-20 07:46:02

标签: c++ c winapi keyboard

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

任何代码段?或者帮助

4 个答案:

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

List of virtual key codes .....

答案 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/