Подтвердить что ты не робот

Как использовать функцию sendinput С++

Я понятия не имею, какие параметры введены, хотя я видел функцию sendinput из msdn.

UINT WINAPI SendInput(
_In_ UINT nInputs,
_In_ LPINPUT pInputs,
_In_ int cbSize
);

Что означают параметры выше и что мне нужно создать для них? Кроме того, введите, ki.wScan, ki.time, ki.dwExtraInfo, ki.wVk, ki.dwFlags Что означают объекты выше и есть ли какие-либо другие объекты, которые могут часто использоваться?

4b9b3361

Ответ 1

UINT - это целочисленный тип без знака. _In_ означает, что параметр является входным параметром, который вы отправляете в функцию. Это противоречит выходному параметру, который будет отправляться вам, и функция будет заполняться.

Структура LPINPUT определяется следующим образом:

typedef struct tagINPUT {
    DWORD   type;

    union
    {
        MOUSEINPUT      mi;
        KEYBDINPUT      ki;
        HARDWAREINPUT   hi;
    };
} INPUT, *PINPUT, FAR* LPINPUT;

Таким образом, он выглядит как DWORD в сочетании с объединением некоторых других структур. Подробнее см. WinUser.h.

DWORD - это 32-разрядное целое без знака (источник):

A DWORD - это 32-разрядное целое без знака (диапазон: от 0 до 4294967295 десятичная дробь). Поскольку DWORD без знака, его первый бит (наиболее значимый Бит (MSB)) не зарезервирован для подписания. Этот тип объявляется как следует: typedef unsigned long DWORD, * PDWORD, * LPDWORD;

ввода мышка

typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;

KEYBDINPUT

typedef struct tagKEYBDINPUT {
    WORD    wVk;
    WORD    wScan;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT, FAR* LPKEYBDINPUT;

HARDWAREINPUT

typedef struct tagHARDWAREINPUT {
    DWORD   uMsg;
    WORD    wParamL;
    WORD    wParamH;
} HARDWAREINPUT, *PHARDWAREINPUT, FAR* LPHARDWAREINPUT;

WORD, LONG, 'ULONG , and ULONG_PTR` четко определены на странице MSDN (см. столбец справа)

Вот пример использования SendInput, который можно легко найти через Googling (Источник):

//
// keystroke.c - Pauses, then simulates a key press
// and release of the "A" key.
//
// Written by Ted Burke - last updated 17-4-2012
//
// To compile with MinGW:
//
//      gcc -o keystroke.exe keystroke.c
//
// To run the program:
//
//      keystroke.exe
//
// ...then switch to e.g. a Notepad window and wait
// 5 seconds for the A key to be magically pressed.
//

// Because the SendInput function is only supported in
// Windows 2000 and later, WINVER needs to be set as
// follows so that SendInput gets defined when windows.h
// is included below.
#define WINVER 0x0500
#include <windows.h>

int main()
{
    // This structure will be used to create the keyboard
    // input event.
    INPUT ip;

    // Pause for 5 seconds.
    Sleep(5000);

    // Set up a generic keyboard event.
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0; // hardware scan code for key
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    // Press the "A" key
    ip.ki.wVk = 0x41; // virtual-key code for the "a" key
    ip.ki.dwFlags = 0; // 0 for key press
    SendInput(1, &ip, sizeof(INPUT));

    // Release the "A" key
    ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
    SendInput(1, &ip, sizeof(INPUT));

    // Exit normally
    return 0;
}

Другая часть вашего вопроса:

Кроме того, введите, ki.wScan, ki.time, ki.dwExtraInfo, ki.wVk, ki.dwFlags Что означают объекты, означающие

Я считаю, что вы ссылаетесь на этот код на странице MSDN:

// IMPORTANT: Current keyboard layout 0xf0010413 (Netherland with USA kbd)!!!!!!!
WORD vkCode = 0x36; // '6'
INPUT keyEvent = {0};
keyEvent.type = INPUT_KEYBOARD;
keyEvent.ki.wVk = vkCode;
keyEvent.ki.wScan = MapVirtualKeyEx(vkCode, 0, (HKL)0xf0010413);
SendInput(1, &amp;keyEvent, sizeof(keyEvent));

Этот код был опубликован другим использованием на странице; это не часть документации. Пользователь просто создал структуру LPINPUT с именем keyEvent, а затем обратился к части структуры KEYBDEVENT:

KEYBDINPUT      ki;