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
Referência