Функция 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 |
См. также раздел
Основные понятия
Справочные материалы