如何假装按键盘键

时间:2014-08-24 12:30:28

标签: c windows

我想制作一个按键盘按键的程序,或者我最好说一个程序告诉电脑键被按下(但他们不是),但我不知道哪种语言最适合此目的。也许C?如果最合适的语言是C,我应该使用哪些库或系统调用?

我的操作系统是Windows 7。

1 个答案:

答案 0 :(得分:1)

在Windows上,您可以使用keybd_event功能。

VOID WINAPI keybd_event(
  _In_  BYTE bVk,
  _In_  BYTE bScan,
  _In_  DWORD dwFlags,
  _In_  ULONG_PTR dwExtraInfo
);

它在windows.h中定义。

示例程序:

#include <stdio.h>
#include <ctype.h>
#include <windows.h>

/* Types the string @str on a virtual keyboard. */
void type_str(const char *str)
{
    char ch;
    int key;
    while ((ch = *str++)) {
        if (!isalpha(ch) && ch != ' ') {
            fprintf(stderr, "Cannot type '%c'!\n", ch);
            continue;
        }
        fprintf(stderr, "Typing '%c'.\n", ch);
        if (isupper(ch)) {
            key = ch; /* The keycode equals the character value for all
                         alphabetic characters and space. */
            keybd_event(VK_SHIFT, 0, 0, 0);

            /* 2nd arg: 0 means press the key. */
            keybd_event(key, 0, 0, 0);

            /* 2nd arg: KEYEVENTF_KEYUP means release the key. */
            keybd_event(key, 0, KEYEVENTF_KEYUP, 0);

            keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
        } else {
            /* We need to use the uppercase character value. */
            key = toupper(ch);
            keybd_event(key, 0, 0, 0);
            keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
        }
    }
}

int main(int argc, char *argv[])
{
    puts("Waiting one second!");
    Sleep(1000); // Wait for user to open a text editor.
    type_str("Hello world");
    return 0;
}

此示例只能打印字母字符和空格。如果您想为该功能添加更多字符,请访问此链接以查找其他密钥的密钥代码:http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

有关该功能的更多文档,请访问:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx