Partager via


Fonction SendInput (winuser.h)

Synthétise les frappes au clavier, les mouvements de la souris et les clics sur les boutons.

Syntaxe

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

Paramètres

[in] cInputs

Type : UINT

Nombre de structures dans le tableau pInputs .

[in] pInputs

Type : LPINPUT

Tableau de structures INPUT . Chaque structure représente un événement à insérer dans le flux d’entrée du clavier ou de la souris.

[in] cbSize

Type : int

Taille, en octets, d’une structure INPUT . Si cbSize n’a pas la taille d’une structure INPUT , la fonction échoue.

Valeur retournée

Type : UINT

La fonction retourne le nombre d’événements qu’elle a correctement insérés dans le flux d’entrée du clavier ou de la souris. Si la fonction retourne zéro, l’entrée a déjà été bloquée par un autre thread. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Cette fonction échoue lorsqu’elle est bloquée par UIPI. Notez que ni GetLastError ni la valeur de retour n’indiquent que l’échec a été provoqué par le blocage DE L’UIPI.

Remarques

Cette fonction est soumise à UIPI. Les applications sont autorisées à injecter des entrées uniquement dans les applications qui sont à un niveau d’intégrité égal ou inférieur.

La fonction SendInput insère les événements des structures INPUT en série dans le flux d’entrée du clavier ou de la souris. Ces événements ne sont pas entrecoupés d’autres événements d’entrée de clavier ou de souris insérés par l’utilisateur (avec le clavier ou la souris) ou par des appels à keybd_event, mouse_event ou d’autres appels à SendInput.

Cette fonction ne réinitialise pas l’état actuel du clavier. Toutes les touches déjà enfoncées lorsque la fonction est appelée peuvent interférer avec les événements générés par cette fonction. Pour éviter ce problème, case activée l’état du clavier avec la fonction GetAsyncKeyState et corrigez si nécessaire.

Étant donné que le clavier tactile utilise les macros de substitution définies dans winnls.h pour envoyer une entrée au système, un écouteur sur le crochet d’événement du clavier doit décoder l’entrée provenant du clavier tactile. Pour plus d’informations, consultez Substituts et caractères supplémentaires.

Une application d’accessibilité peut utiliser SendInput pour injecter des frappes correspondant aux touches de raccourci de lancement de l’application qui sont gérées par l’interpréteur de commandes. Il n’est pas garanti que cette fonctionnalité fonctionne pour d’autres types d’applications.

Exemple

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll

Voir aussi

Conceptuel

GetAsyncKeyState

INPUT

Entrées du clavier

Référence

Substituts et caractères supplémentaires

keybd_event

mouse_event