Condividi tramite


Funzione SendInput (winuser.h)

Sintetizza le sequenze di tasti, i movimenti del mouse e i clic sui pulsanti.

Sintassi

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

Parametri

[in] cInputs

Tipo: UINT

Numero di strutture nella matrice pInputs .

[in] pInputs

Tipo: LPINPUT

Matrice di strutture INPUT . Ogni struttura rappresenta un evento da inserire nel flusso di input della tastiera o del mouse.

[in] cbSize

Tipo: int

Dimensioni, in byte, di una struttura INPUT . Se cbSize non è la dimensione di una struttura INPUT , la funzione ha esito negativo.

Valore restituito

Tipo: UINT

La funzione restituisce il numero di eventi inseriti correttamente nel flusso di input della tastiera o del mouse. Se la funzione restituisce zero, l'input è già stato bloccato da un altro thread. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Questa funzione ha esito negativo quando viene bloccata da UIPI. Si noti che né GetLastError né il valore restituito indicherà che l'errore è stato causato dal blocco UIPI.

Commenti

Questa funzione è soggetta a UIPI. Le applicazioni possono inserire l'input solo nelle applicazioni con un livello di integrità uguale o inferiore.

La funzione SendInput inserisce gli eventi nelle strutture INPUT serialmente nel flusso di input della tastiera o del mouse. Questi eventi non vengono intersperati con altri eventi di input della tastiera o del mouse inseriti dall'utente (con la tastiera o il mouse) o chiamate a keybd_event, mouse_event o altre chiamate a SendInput.

Questa funzione non reimposta lo stato corrente della tastiera. Qualsiasi tasto già premuto quando la funzione viene chiamata potrebbe interferire con gli eventi generati da questa funzione. Per evitare questo problema, controllare lo stato della tastiera con la funzione GetAsyncKeyState e correggere in base alle esigenze.

Poiché la tastiera touch usa le macro surrogate definite in winnls.h per inviare l'input al sistema, un listener sul gancio evento della tastiera deve decodificare l'input proveniente dalla tastiera touch. Per altre informazioni, vedere Surrogati e caratteri supplementari.

Un'applicazione di accessibilità può usare SendInput per inserire le sequenze di tasti corrispondenti ai tasti di scelta rapida dell'applicazione gestiti dalla shell. Questa funzionalità non è garantita per altri tipi di applicazioni.

Esempio

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

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll

Vedi anche

Informazioni concettuali

GetAsyncKeyState

INPUT

Input della tastiera

Riferimento

Surrogati e caratteri supplementari

keybd_event

mouse_event