[C#] Tastendruck simulieren (Spezialtasten)

Drucken
( 4 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 03.04.2012 Zuletzt aktualisiert am 04.04.2012 Geschrieben von Jonny132
Das .NET Framework hat für uns schon daran gedacht eine Funktion bereitzustellen eine bzw. mehrere Tasten zu simulieren. Diese Funktion nennt sich SendKeys und ist eigentlich ganz einfach zu bedienen WENN man keine Spezialtasten (Enter, F1, Tabulator, usw.) verwenden will.
Braucht man diese jedoch, muss man ein Spezielles 'Format' für die Tasten an SendKeys weitergeben. Dieses Format beginnt immer mit einer geschweiften Klammer, danach kommt ein Schlüsselwort das die Spezialtaste definiert, gefolgt von einer weiteren (schliessenden) geschweiften Klammer.

In diesem Tutorial zeige ich euch wie man eine Funktion implementieren könnte in der SendKeys auch die Spezialtasten berücksichtigt.
Für diesen Zweck legen wir ein Globales Dictionary an welches die Spezialtasten mit dem jeweiligen Schlüsselwort enthält.
private Dictionary<Keys, string> specialKeys = new Dictionary<Keys, string>();
In dieses Dictionary fügen wir nun alle Speziellen Tasten ein mit ihrem jeweiligen Schlüsselwort.
      specialKeys.Add(Keys.Back, "{BACKSPACE}"); // Rücktaste
      specialKeys.Add(Keys.Pause, "{BREAK}"); // Pausetaste / Untbr - Taste
      specialKeys.Add(Keys.CapsLock, "{CAPSLOCK} "); //Feststelltaste
      specialKeys.Add(Keys.Delete, "{DELETE}"); // Entf - Taste
      specialKeys.Add(Keys.End, "{END} "); // Ende - Taste
      specialKeys.Add(Keys.Enter, "{ENTER}"); // Eingabetaste
      specialKeys.Add(Keys.Escape, "{ESC}"); // ESC - Taste
      specialKeys.Add(Keys.Help, "{HELP}"); // Help - Taste
      specialKeys.Add(Keys.Home, "{HOME}"); // Windowns - Taste
      specialKeys.Add(Keys.Insert, "{INSERT}"); // Einfg - Taste
      specialKeys.Add(Keys.Left, "{LEFT}"); // Pfeil-Nach-Links - Taste
      specialKeys.Add(Keys.Right, "{RIGHT}"); // Pfeil-Nach-Rechts - Taste
      specialKeys.Add(Keys.Up, "{UP}"); // Pfeil-Nach-Oben - Taste
      specialKeys.Add(Keys.Down, "{DOWN} "); // Pfeil-Nach-Unten - Taste
      specialKeys.Add(Keys.NumLock, "{NUMLOCK}"); // Num - Taste
      specialKeys.Add(Keys.PageDown, "{PGDN}"); // Bild-Pfeil-Runter - Taste
      specialKeys.Add(Keys.PageUp, "{PGUP}"); // Bild-Pfeil-Rauf - Taste
      specialKeys.Add(Keys.Print, "{PRTSC}"); // Druck - Taste
      specialKeys.Add(Keys.Scroll, "{SCROLLLOCK}"); // Rollen - Taste
      specialKeys.Add(Keys.Tab, "{TAB}"); // Tabulator - Taste#
      specialKeys.Add(Keys.F1, "{F1}"); // F1 - Taste
      specialKeys.Add(Keys.F2, "{F2}"); // F2 - Taste
      specialKeys.Add(Keys.F3, "{F3}"); // F3 - Taste
      specialKeys.Add(Keys.F4, "{F4}"); // F4 - Taste
      specialKeys.Add(Keys.F5, "{F5}"); // F5 - Taste
      specialKeys.Add(Keys.F6, "{F6}"); // F6 - Taste
      specialKeys.Add(Keys.F7, "{F7}"); // F7 - Taste
      specialKeys.Add(Keys.F8, "{F8}"); // F8 - Taste
      specialKeys.Add(Keys.F9, "{F9}"); // F9 - Taste
      specialKeys.Add(Keys.F10, "{F10}"); // F10 - Taste
      specialKeys.Add(Keys.F11, "{F11}"); // F11 - Taste
      specialKeys.Add(Keys.F12, "{F12}"); // F12 - Taste
      specialKeys.Add(Keys.F13, "{F13}"); // F13 - Taste
      specialKeys.Add(Keys.F14, "{F14}"); // F14 - Taste
      specialKeys.Add(Keys.F15, "{F15}"); // F15 - Taste
      specialKeys.Add(Keys.F16, "{F16}"); // F16 - Taste
      specialKeys.Add(Keys.Add, "{ADD}"); // 'Plus' - Taste
      specialKeys.Add(Keys.Subtract, "{SUBTRACT}"); // 'Minus' - Taste
      specialKeys.Add(Keys.Multiply, "{MULTIPLY}"); // 'Mal' - Taste
      specialKeys.Add(Keys.Divide, "{DIVIDE}"); // 'Geteilt' - Taste
Dieses Dictionary kann man natürlich weiterführen bzw. erweitern. Kommen wir nun zur Funktion welche unser Dictionarybenützt. Die implementierung übernimmt eine Taste welche simuliert werden soll, eine Anzahl wie oft die Taste simuliert werden soll und einen Intervall (in Millisekunden) in welchem Abstand die Taste simuliert werden soll.
    private void SimuliereTastendruck(Keys taste, int anzahl, int intervall)
    {
      for (int i = 0; i < anzahl; i++)
      {
        if (specialKeys.ContainsKey(taste))
          SendKeys.SendWait(specialKeys[taste]);
        else
          SendKeys.SendWait(taste.ToString());

        System.Threading.Thread.Sleep(intervall);
      }
    }
Auch dieser Code ist recht simpel. Falls die Taste in dem zuvor definierten Dictionary vorhanden ist, soll des Schlüsselwort dieser Taste per Sendkeys simuliert werden. Ansonsten der direkte Wert der Taste. Danach stoppen wir den Thread für die Dauer des angegebenen Intervalls.

Der Aufruf könnte so aussehen:
      SimuliereTastendruck(Keys.Enter, 10, 5000);
Ebenfalls könnte für Sie dieses Tutuorial interessant sein: [C#] Auf bestimmte Position klicken - Mausklick simulieren

    Veröffentlichen Sie ihre Kommentare ...