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
Referenz