Функция SendInput (winuser.h)

Синтезирует нажатия клавиш, движения мыши и нажатия кнопок.

Синтаксис

UINT SendInput(
  [in] UINT    cInputs,
  [in] LPINPUT pInputs,
  [in] int     cbSize
);

Параметры

[in] cInputs

Тип: UINT

Число структур в массиве pInputs .

[in] pInputs

Тип: LPINPUT

Массив структур INPUT . Каждая структура представляет событие для вставки в поток ввода с клавиатуры или мыши.

[in] cbSize

Тип: int

Размер (в байтах) структуры INPUT . Если cbSize не соответствует размеру структуры INPUT , функция завершается ошибкой.

Возвращаемое значение

Тип: UINT

Функция возвращает количество событий, успешно вставляемых в поток ввода с клавиатуры или мыши. Если функция возвращает ноль, входные данные уже заблокированы другим потоком. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Эта функция завершается сбоем, если она заблокирована UIPI. Обратите внимание, что ни GetLastError , ни возвращаемое значение не указывают, что сбой был вызван блокировкой UIPI.

Комментарии

Эта функция подчиняется UIPI. Приложениям разрешено внедрять входные данные только в приложения с равным или меньшим уровнем целостности.

Функция SendInput последовательно вставляет события из структур INPUT в поток ввода с клавиатуры или мыши. Эти события не чередуются с другими событиями ввода с клавиатуры или мыши, вставленными пользователем (с помощью клавиатуры или мыши) или вызовами keybd_event, mouse_event или другими вызовами SendInput.

Эта функция не сбрасывает текущее состояние клавиатуры. Все клавиши, которые уже нажаты при вызове функции, могут помешать событиям, создаваемым этой функцией. Чтобы избежать этой проблемы, проверка состояние клавиатуры с помощью функции GetAsyncKeyState и исправьте при необходимости.

Так как сенсорная клавиатура использует суррогатные макросы, определенные в winnls.h, для отправки входных данных в систему, прослушиватель на перехватчике событий клавиатуры должен декодировать вход, исходящий из сенсорной клавиатуры. Дополнительные сведения см. в разделе Суррогаты и дополнительные символы.

Приложение специальных возможностей может использовать SendInput для внедрения нажатий клавиш, соответствующих сочетаниям клавиш запуска приложения, которые обрабатываются оболочкой. Эта функция не гарантируется для других типов приложений.

Пример

//**********************************************************************
//
// Sends Win + D to toggle to the desktop
//
//**********************************************************************
void ShowDesktop()
{
    OutputString(L"Sending 'Win-D'\r\n");
    INPUT inputs[4] = {};
    ZeroMemory(inputs, sizeof(inputs));

    inputs[0].type = INPUT_KEYBOARD;
    inputs[0].ki.wVk = VK_LWIN;
   
    inputs[1].type = INPUT_KEYBOARD;
    inputs[1].ki.wVk = 'D';

    inputs[2].type = INPUT_KEYBOARD;
    inputs[2].ki.wVk = 'D';
    inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;

    inputs[3].type = INPUT_KEYBOARD;
    inputs[3].ki.wVk = VK_LWIN;
    inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;

    UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT));
    if (uSent != ARRAYSIZE(inputs))
    {
        OutputString(L"SendInput failed: 0x%x\n", HRESULT_FROM_WIN32(GetLastError()));
    } 
}

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

Основные понятия

GetAsyncKeyState

INPUT

Ввод с клавиатуры

Справочные материалы

Суррогаты и дополнительные символы

keybd_event

mouse_event