📜  在 c 中发送击键 (1)

📅  最后修改于: 2023-12-03 15:23:06.957000             🧑  作者: Mango

在 C 中发送击键

在 C 语言中,如果需要向计算机发送击键,可以使用 Windows API 提供的 SendInput 函数。SendInput 函数是用来模拟输入设备的函数,我们可以通过它来模拟鼠标和键盘的输入事件。

使用 SendInput 函数发送击键,需要先定义一个 INPUT 结构体数组,用来存储模拟的输入事件。然后,使用 SendInput 函数将 INPUT 结构体数组发送到系统消息队列中,等待被处理。

以下是一个使用 SendInput 函数发送击键的示例代码片段:

#include <windows.h>

void PressKey(short key)
{
    INPUT input = { 0 };

    input.type = INPUT_KEYBOARD;
    input.ki.wScan = MapVirtualKey(key, MAPVK_VK_TO_VSC);
    input.ki.time = 0;
    input.ki.dwExtraInfo = 0;
    input.ki.wVk = key;
    input.ki.dwFlags = 0;

    SendInput(1, &input, sizeof(INPUT));
}

void ReleaseKey(short key)
{
    INPUT input = { 0 };

    input.type = INPUT_KEYBOARD;
    input.ki.wScan = MapVirtualKey(key, MAPVK_VK_TO_VSC);
    input.ki.time = 0;
    input.ki.dwExtraInfo = 0;
    input.ki.wVk = key;
    input.ki.dwFlags = KEYEVENTF_KEYUP;

    SendInput(1, &input, sizeof(INPUT));
}

该代码中包含两个函数 PressKey 和 ReleaseKey,分别用于按下和释放一个键。这两个函数中,首先定义了一个 INPUT 结构体,并为其赋值,然后使用 SendInput 函数发送该输入事件。

以上是一个简单的示例,实际使用中可能需要结合其他函数,如 Sleep 函数,来等待键盘事件的发生。同时,还需要了解不同键的 Virtual-Key Code(虚拟键码),可以通过 Windows API 提供的 MapVirtualKey 函数将 Virtual-Key Code 转换为 Scan Code(扫描码),从而进行相应的模拟。