Igazából a cím csak a tartalom felétől lesz megfelelő, ugyanis jön egy kis bevezető.
Ahhoz hogy NumLock-ot meg egyéb gombokat kapcsolgathassunk, legjobb módszer ha azt meg is nyomjuk, csak épp szoftveresen. C#-ben ezt úgy lehet elérni, hogy Windows API hívásokkal dobálózunk és a user32.dll rendszerfájlnak használjuk a keybd_event függvényét.
Hogy ezt elérhessük, (user32 -> keybd_event) a következő kóddal kell bővíteni a kódot:
[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern void keybd_event(byte bVk, byte bScan, long dwFlags, long dwExtraInfo);
Most, hogy meg van ez is, a következő lépés a használt gombok definiálása lesz:
const int VK_NUMLOCK = 0x90;
const int VK_SCROLL = 0x91;
const int VK_CAPITAL = 0x14;
const int KEYEVENTF_KEYUP = 0x02;
A neveket, és a hozzátartozó értékeket innen lehet kinézni.
Most pedig már lehet szoftveresen leütni a billentyűket:
keybd_event(VK_NUMLOCK, 0x45, 0, 0);
keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_KEYUP, 0);
Ez a fenti kód lenyomja a NumLock billentyűt, majd elengedi, így elérve azt, ami akkor történik ha a billentyűzeten ütnénk meg a NumLock billentyűt.
Ez egy gyors bemutató volt, hogy hogy lehet Windows API hívásokat csinálni C#-ból. Akk részletesebben szeretné tanulmányozni a Windows API hívásait, az a pinvoke.net oldalra tessékeljen, ott meg szépen fel vannak boncolva fájlok, és a bennük meghívható függvények.
Easter Egg-ként (?!?) írtam egy kis haszontalan alkalmazást, ami a NumLock, CapsLock, és ScrollLock billentyűket nyomogatja (lásd. első kép). Innen tölthető le, és tartalmazza a forrást is.