C# - Billentyű lenyomás szimulálása tetszőleges alkalmazásnál

forráskód letöltése
Mellékelt példában egy olyan alkalmazást valósítunk meg, mely képes arra, hogy az épp aktív programnál billentyű lenyomásokat szimuláljon. Ennek hatására az adott program úgy érzékeli, hogy a programunk által küldött billentyűket a felhasználó a billentyűzeten keresztül nyomkodta le.
A megvalósításhoz a SendKeys osztályt használhatjuk, ezen belül is a Send függvényt. Ez egyetlen sztring típusú paramétert vár. A megadott sztring-ben lévő karakterek lesznek azok, melyeket az aktív program úgy érzékel, mintha a felhasználó azokat a billentyűzeten keresztül gépelte volna be.
Send
Osztály: System.Windows.Forms.SendKeys
public static void Send(
string keys
);
Send függvény segítségével szimulálhatunk tetszőleges billentyű lenyomásokat.
Paraméterek
string keys
A keys paraméterben kell megadni azt a sztringet, mely tartalmazza a szimulálandó karaktereket.
Megjegyzés
A speciális billentyűkhöz egy-egy kód tartozik. E kód elhelyezése a keys paraméter sztringjében egyenértékű lesz a kódhoz tartozó billentyű lenyomásával.
Billentyű Kód
BACKSPACE {BACKSPACE} vagy {BS} vagy {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DELETE {DELETE}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}vagy ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} vagy {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
Keypad + {ADD}
Keypad - {SUBTRACT}
Keypad * {MULTIPLY}
Keypad / {DIVIDE}
Lehetőségünk van arra is, hogy módosító billentyűket is szimuláljuk. Ehhez az alábbi jelek egyikét kell használnunk, majd zárójelek között megadni azokat a karaktereket, melyekre szükségünk van.
Billentyű Kód
SHIFT +
CTRL ^
ALT %
Így például a "+(a)" elküldése egyenértékű egy shift + a billentyű kombinációval.
Arra is van lehetőségünk, hogy egy karaktert megismételtessünk egy általunk megadott darabszámig. Ehhez kapcsos zárójelek között adjuk meg az adott karaktert, majd írjuk utána számmal, hogy hány ismétlést szeretnénk.
Speciális karakterek szimulálására is van lehetőségünk. Ezek esetén a nevüket kell leírnunk szintén kapcsos zárójelek közé. Például egy Enter billentyű szimulálásához az "{enter}" sztringet kell átadni.
  protected void timer1_Tick (object sender, System.EventArgs e)
  {
    SendKeys.Send("ab");
    SendKeys.Send("+(cd)");
    SendKeys.Send("{e 10}");
    SendKeys.Send("{enter}");        
    SendKeys.Send("{tab}");
  }
Tudnunk kell, hogy a SendKeys osztály használatával csak Windows alkalmazásoknál szimulálhatjuk a billentyű kombinációk lenyomását, valamint azt, hogy a PrintScreen billentyű nem szimulálható.
Másik hasznos függvénye a SendKeys osztálynak a SendWait függvény. Ez nem csak elküldi a fenti szabályok figyelembevételével átadott sztringet az adott alkalmazásnak, de meg is várja, amíg az adott program ezt fogadni tudja. Vagyis a SendWait függvény hívás után a saját program futása csak akkor folytatódik a következő utasításunknál, ha fogadó alkalmazás már feldolgozta a kapott billentyű „lenyomást”.