Função SendInput (winuser.h)

Sintetiza pressionamentos de teclas, movimentos do mouse e cliques de botão.

Sintaxe

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

Parâmetros

[in] cInputs

Tipo: UINT

O número de estruturas na matriz pInputs .

[in] pInputs

Tipo: LPINPUT

Uma matriz de estruturas INPUT . Cada estrutura representa um evento a ser inserido no fluxo de entrada do teclado ou mouse.

[in] cbSize

Tipo: int

O tamanho, em bytes, de uma estrutura INPUT . Se cbSize não for o tamanho de uma estrutura INPUT , a função falhará.

Retornar valor

Tipo: UINT

A função retorna o número de eventos que inseriu com êxito no fluxo de entrada do teclado ou mouse. Se a função retornar zero, a entrada já foi bloqueada por outro thread. Para obter informações de erro estendidas, chame GetLastError.

Essa função falha quando é bloqueada pela UIPI. Observe que nem GetLastError nem o valor retornado indicarão que a falha foi causada pelo bloqueio de UIPI.

Comentários

Essa função está sujeita à UIPI. Os aplicativos têm permissão para injetar entrada somente em aplicativos que estão em um nível de integridade igual ou menor.

A função SendInput insere os eventos nas estruturas INPUT serialmente no fluxo de entrada do teclado ou mouse. Esses eventos não são intercalados com outros eventos de entrada de teclado ou mouse inseridos pelo usuário (com o teclado ou mouse) ou por chamadas para keybd_event, mouse_event ou outras chamadas para SendInput.

Essa função não redefine o estado atual do teclado. Todas as teclas que já são pressionadas quando a função é chamada podem interferir nos eventos gerados por essa função. Para evitar esse problema, marcar o estado do teclado com a função GetAsyncKeyState e correta conforme necessário.

Como o teclado virtual usa as macros substitutas definidas em winnls.h para enviar entrada para o sistema, um ouvinte no gancho de evento de teclado deve decodificar a entrada proveniente do teclado virtual. Para obter mais informações, consulte Substitutos e Caracteres Suplementares.

Um aplicativo de acessibilidade pode usar SendInput para injetar pressionamentos de tecla correspondentes às teclas de atalho de inicialização do aplicativo que são manipuladas pelo shell. Não há garantia de que essa funcionalidade funcione para outros tipos de aplicativos.

Exemplo

//**********************************************************************
//
// 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()));
    } 
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll

Confira também

Conceitual

GetAsyncKeyState

INPUT

Entrada por teclado

Referência

Caracteres substitutos e suplementares

keybd_event

mouse_event