Samstag, 29. Mai 2010

Tastendruck simulieren

Auch um Tastendrucke zu simulieren, gibt es in C# eine einfache Funktion.
Die Klasse SendKeys stellt entsprechende Möglichkeiten zur Verfügung.
Es existieren die Funktionen Send() und SendWait(). Beiden Funktionen wird ein String übergeben und dieser an das gerade aktive Programm sendet, so als hätte der Benutzer die entsprechenden Tasten auf der Tastatur gedrückt.
SendWait() wartet im Gegenzug zu Send() auf die Verarbeitung der Eingabe.
Folgender Beispielcode kann z.B. auf das Click - Event eines Buttons gelegt werden.
Wird der Code ausgeführt, wartet das Programm noch 3 Sekunden, der Benutzer wechselt zum entsprechenden Programm (rein zufällig einem Chatclient) und die Applikation feuert 100mal die Nachricht "WICHTIG!" ab:
System.Threading.Thread.Sleep(3000);
for (int i = 0; i < 100; i++)
{
    SendKeys.Send("WICHTIG! \n");
}

"\n" fügt einen Zeilenumbruch dem Text hinzu, Tastendrücke auf Spezialtasten, wie z.B. die Enter - Taste können aber auch simuliert werden, Enter beispielsweise mit "{ENTER}" (als String, d.h. mit Anführungszeichen wie ein normaler Text).

Es gibt auch einen Post zum Simulieren von Mausklicks etc.

Kommentare:

  1. wie kann ich die windows taste simulieren?

    AntwortenLöschen
  2. Hi Dave,
    wie es aussieht geht die Windows Taste anscheinend nicht mit SendKeys da sie eine "zusammengebaute" Spezialtaste ist.
    Probier's aber mal mit:

    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
    UIntPtr dwExtraInfo);

    private void Form1_Load(object sender, EventArgs e)
    {
    const byte KEYEVENTF_KEYUP = 2;
    const byte VK_LWIN = 91;

    // Windowstaste + E simulieren (öffnet Explorer):
    keybd_event(VK_LWIN, 0, 0, (UIntPtr)0); // Windowstastendruck simulieren
    keybd_event(69, 0, 0, (UIntPtr)0); // ggf. weiteren Tastendruck simulieren (ASCII Wert angeben, hier 69 für E)
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, (UIntPtr)0); // Tastenloslassen simulieren
    }

    AntwortenLöschen
  3. Hi Dave,

    Die WindowsTaste ist
    "{HOME}"

    AntwortenLöschen
  4. Wie geht die Links und Rechts Taste?

    AntwortenLöschen
    Antworten
    1. Hallo, das sind {LEFT} und {RIGHT} (siehe http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys(v=vs.71).aspx)

      Löschen
    2. An alle, die dies jetzt ausprobieren wollen, ich würde davon abraten, denn es führt zu einem Fehler.
      Einzige Lösung: PC abschießen -.- Danke auch!

      Löschen
  5. Hallo,
    ich habe ein Anliegen bezüglich eines Programms, das den Tastendruck von Alt und F10 in einem periodischen Abstand von 10 Minuten simuliert (weil Shadowplay unter Win7 im Shadowmodus ja nur 10min aufnimmt). Es wäre ganz cool, wenn man dieses Programm über einen Button starten und wieder beenden kann. Da ich überhaupt keine Ahnung von C# habe wäre es echt nett, wenn mir jemand den Quellcode aufschreiben könnte..
    Ich hoffe auf schnelle Antwort. :)

    AntwortenLöschen
  6. Kleiner Nachtrag um Missverständnisse zu vermeiden: Alt und F10 sollen gleichzeitig gedrückt werden.

    AntwortenLöschen
  7. Hallo,

    komischerweise sendet die Methode bei mir keine Klammern. Weiß jemand, woran das liegen könnte?

    Vielen Dank im Voraus.

    AntwortenLöschen
    Antworten
    1. Hallo Julian,
      das liegt daran, dass man mit Klammern bestimmte Zeichen umgibt um bestimmte Tasten zu senden, z.B. {TAB} für Tab. Daher muss man Klammern selbst auch damit umgeben, schreibe also {(} für (, {{} für { etc.

      Löschen