SendInput-Funktion (winuser.h)

Synthetisiert Tastenanschläge sowie Mausbewegungen und -klicks.

Syntax

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

Parameter

[in] cInputs

Typ: UINT

Die Anzahl der Strukturen im pInputs-Array .

[in] pInputs

Typ: LPINPUT

Ein Array von INPUT-Strukturen . Jede Struktur stellt ein Ereignis dar, das in den Tastatur- oder Mauseingabestream eingefügt werden soll.

[in] cbSize

Typ: int

Die Größe einer INPUT-Struktur in Bytes. Wenn cbSize nicht die Größe einer INPUT-Struktur aufweist, schlägt die Funktion fehl.

Rückgabewert

Typ: UINT

Die Funktion gibt die Anzahl der Ereignisse zurück, die erfolgreich in den Tastatur- oder Mauseingabestream eingefügt wurden. Wenn die Funktion null zurückgibt, wurde die Eingabe bereits von einem anderen Thread blockiert. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Diese Funktion schlägt fehl, wenn sie von UIPI blockiert wird. Beachten Sie, dass weder GetLastError noch der Rückgabewert angeben, dass der Fehler durch uiPI-Blockierung verursacht wurde.

Hinweise

Diese Funktion unterliegt UIPI. Anwendungen dürfen nur Eingaben in Anwendungen einfügen, die eine gleiche oder eine geringere Integritätsebene aufweisen.

Die SendInput-Funktion fügt die Ereignisse in den INPUT-Strukturen seriell in den Tastatur- oder Mauseingabestream ein. Diese Ereignisse sind nicht mit anderen Tastatur- oder Mauseingabeereignissen durchsetzt, die entweder vom Benutzer (mit der Tastatur oder Maus) oder durch Aufrufe von keybd_event, mouse_event oder anderen Aufrufen von SendInput eingefügt werden.

Diese Funktion setzt den aktuellen Zustand der Tastatur nicht zurück. Alle Tasten, die bereits gedrückt werden, wenn die Funktion aufgerufen wird, können die Ereignisse beeinträchtigen, die von dieser Funktion generiert werden. Um dieses Problem zu vermeiden, überprüfen Sie den Zustand der Tastatur mit der GetAsyncKeyState-Funktion , und korrigieren Sie sie bei Bedarf.

Da die Bildschirmtastatur die in winnls.h definierten Ersatzmakros verwendet, um Eingaben an das System zu senden, muss ein Listener am Tastaturereignishook eingaben, die von der Bildschirmtastatur stammen, decodieren. Weitere Informationen finden Sie unter Ersatzzeichen und Ergänzende Zeichen.

Eine Anwendung für die Barrierefreiheit kann SendInput verwenden, um Tastaturanschläge zu einfügen, die den Tastenkombinationen für den Anwendungsstart entsprechen, die von der Shell verarbeitet werden. Diese Funktionalität funktioniert nicht garantiert für andere Arten von Anwendungen.

Beispiel

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll

Siehe auch

Konzept

GetAsyncKeyState

INPUT

Tastatureingabe

Referenz

Surrogate und ergänzende Zeichen

keybd_event

mouse_event