Función SendInput (winuser.h)

Sintetiza pulsaciones de tecla, movimientos del mouse y clics de botón.

Sintaxis

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

Parámetros

[in] cInputs

Tipo: UINT

Número de estructuras de la matriz pInputs .

[in] pInputs

Tipo: LPINPUT

Matriz de estructuras INPUT . Cada estructura representa un evento que se va a insertar en el flujo de entrada del teclado o del mouse.

[in] cbSize

Tipo: int

Tamaño, en bytes, de una estructura INPUT . Si cbSize no es el tamaño de una estructura INPUT , se produce un error en la función.

Valor devuelto

Tipo: UINT

La función devuelve el número de eventos que insertó correctamente en el flujo de entrada del teclado o mouse. Si la función devuelve cero, otro subproceso ya bloqueó la entrada. Para obtener información de error extendida, llame a GetLastError.

Esta función produce un error cuando UIPI la bloquea. Tenga en cuenta que ni GetLastError ni el valor devuelto indicarán que el error fue causado por el bloqueo de UIPI.

Comentarios

Esta función está sujeta a UIPI. Las aplicaciones solo pueden insertar entradas en aplicaciones que estén en un nivel de integridad igual o menor.

La función SendInput inserta los eventos en las estructuras INPUT serialmente en el flujo de entrada del teclado o del mouse. Estos eventos no se intercalan con otros eventos de entrada de teclado o mouse insertados por el usuario (con el teclado o el mouse) o por llamadas a keybd_event, mouse_event u otras llamadas a SendInput.

Esta función no restablece el estado actual del teclado. Las teclas que ya están presionadas cuando se llama a la función pueden interferir con los eventos que esta función genera. Para evitar este problema, compruebe el estado del teclado con la función GetAsyncKeyState y corrija según sea necesario.

Dado que el teclado táctil usa las macros suplentes definidas en winnls.h para enviar la entrada al sistema, un agente de escucha en el enlace de eventos del teclado debe descodificar la entrada que se origina en el teclado táctil. Para obtener más información, vea Suplentes y caracteres complementarios.

Una aplicación de accesibilidad puede usar SendInput para insertar pulsaciones de teclas correspondientes a las teclas de acceso directo de inicio de la aplicación que controla el shell. No se garantiza que esta funcionalidad funcione para otros tipos de aplicaciones.

Ejemplo

//**********************************************************************
//
// 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 Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll

Consulte también

Conceptual

GetAsyncKeyState

INPUT

Entrada de teclado

Referencia

Suplentes y caracteres suplementarios

keybd_event

mouse_event