Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Forms bietet einige Optionen zum programmgesteuerten Simulieren der Tastatureingabe. Dieser Artikel enthält eine Übersicht über diese Optionen.
Verwenden von SendKeys
Windows Forms stellt die System.Windows.Forms.SendKeys Klasse zum Senden von Tastaturanschlägen an die aktive Anwendung bereit. Es gibt zwei Methoden, Tastenanschläge an eine Anwendung zu senden: SendKeys.Send und SendKeys.SendWait. Der Unterschied zwischen den beiden Methoden besteht darin, dass SendWait
den aktuellen Thread blockiert, wenn der Tastaturanschlag gesendet wird und auf eine Antwort wartet, während Send
nicht. Weitere Informationen zu SendWait
finden Sie unter . Um einen Tastenanschlag an eine andere Anwendung zu senden, verwenden Sie.
Vorsicht
Wenn Ihre Anwendung für die internationale Verwendung mit verschiedenen Tastaturen vorgesehen ist, kann die Verwendung von SendKeys.Send unvorhersehbaren Ergebnissen führen und sollten vermieden werden.
Im Hintergrund verwendet SendKeys
eine ältere Windows-Implementierung für die Eingabeverarbeitung, was auf Systemen fehlschlagen kann, bei denen erwartet wird, dass die Anwendung ohne Administratorrechte ausgeführt wird. Wenn die ältere Implementierung fehlschlägt, versucht der Code automatisch die neuere Windows-Implementierung zum Senden von Eingaben. Wenn die SendKeys Klasse die neue Implementierung verwendet, blockiert die SendWait-Methode den aktuellen Thread beim Senden von Tastaturanschlägen an eine andere Anwendung nicht mehr.
Von Bedeutung
Wenn Ihre Anwendung unabhängig vom Betriebssystem auf ein einheitliches Verhalten angewiesen ist, können Sie die SendKeys Klasse erzwingen, die neue Implementierung zu verwenden, indem Sie der app.config Datei die folgende Anwendungseinstellung hinzufügen.
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
Verwenden Sie stattdessen den Wert SendKeys, wenn die -Klasse gezwungen werden soll, "JournalHook"
die vorherige Implementierung zu nutzen.
So senden Sie eine Tastatureingabe an dieselbe Anwendung
Rufen Sie die SendKeys.Send - oder die SendKeys.SendWait -Methode der SendKeys -Klasse auf. Die angegebenen Tastenanschläge werden vom aktiven Steuerelement der Anwendung empfangen.
Im folgenden Codebeispiel wird Send
das gleichzeitige Drücken der Alt- und der Nach-unten-Taste simuliert. Diese Tastaturanschläge bewirken, dass das ComboBox-Steuerelement sein Dropdownmenü anzeigt. In diesem Beispiel wird eine Form-Klasse mit einer Button- und einer ComboBox-Klasse vorausgesetzt.
private void button1_Click(object sender, EventArgs e)
{
comboBox1.Focus();
SendKeys.Send("%+{DOWN}");
}
Private Sub Button1_Click(sender As Object, e As EventArgs)
ComboBox1.Focus()
SendKeys.Send("%+{DOWN}")
End Sub
So senden Sie einen Tastaturanschlag an eine andere Anwendung
Die methoden SendKeys.Send und SendKeys.SendWait senden Tastaturanschläge an die aktive Anwendung, bei der es sich in der Regel um die Anwendung handelt, aus der Sie Tastaturanschläge senden. Um Tastaturanschläge an eine andere Anwendung zu senden, müssen Sie sie zuerst aktivieren. Da es keine verwaltete Methode zum Aktivieren einer anderen Anwendung gibt, müssen Sie systemeigene Windows-Methoden verwenden, um die andere Anwendung zu konzentrieren. Im folgenden Codebeispiel wird Platform Invoke verwendet, um die FindWindow
- und SetForegroundWindow
-Methoden aufzurufen, um das Fenster der Rechner-Anwendung zu aktivieren, und ruft dann Send
auf, um eine Reihe von Berechnungen an die Rechner-Anwendung zu übermitteln.
Das folgende Codebeispiel verwendet Send
, um das Drücken von Tasten in der Windows-Rechneranwendung zu simulieren. Zuerst sucht es nach einem Anwendungsfenster mit dem Titel Calculator
und aktiviert es dann. Nach der Aktivierung werden Tastaturanschläge zum Berechnen der Summe von „10“ und „10“ gesendet.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calcWindow = FindWindow(null, "Calculator");
if (SetForegroundWindow(calcWindow))
SendKeys.Send("10{+}10=");
}
<Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=Runtime.InteropServices.CharSet.Unicode)>
Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function
<Runtime.InteropServices.DllImport("USER32.DLL")>
Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean : End Function
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim hCalcWindow As IntPtr = FindWindow(Nothing, "Calculator")
If SetForegroundWindow(hCalcWindow) Then
SendKeys.Send("10{+}10=")
End If
End Sub
Verwenden Sie OnEventName-Methoden
Die einfachste Möglichkeit zum Simulieren von Tastaturereignissen besteht darin, eine Methode für das Objekt aufzurufen, das das Ereignis auslöst. Die meisten Ereignisse verfügen über eine entsprechende Methode, die sie aufruft, die im Muster von On
gefolgt von EventName
benannt wird, z. B. OnKeyPress
. Diese Option ist nur in benutzerdefinierten Steuerelementen oder Formularen möglich, da diese Methoden geschützt sind und nicht außerhalb des Kontexts des Steuerelements oder Formulars zugegriffen werden kann.
Diese geschützten Methoden stehen zur Verfügung, um Tastaturereignisse zu simulieren.
OnKeyDown
OnKeyPress
OnKeyUp
Weitere Informationen zu diesen Ereignissen finden Sie unter Tastaturereignisse verwenden.
Siehe auch
.NET Desktop feedback