------ Kterak si podbrobit klávesnici ----- Možná jste si někdy všimli, že se skoro u každé hry nebo programu chová klávesnice pokaždé úplně jinak. Většinou se můžete setkat s vlastnostmi tohoto charakteru: Num Lock, Caps Lock a Scroll Lock nereagují a kontrolky svítí stále stejně jako před spuštěním programu, nefunguje Ctrl-C, Ctrl-Break, Ctrl-Alt-Del, známé to kombinace brutálně ukončující právě běžící program. Disablování těchto funkcí je s největší pravděpodobností záměr autora programu. Možná jste se s podobným problémem při psaní programů setkali, ale stále nemůžete přijít na to, jak podobné srandičky s klávesnicí realizovat. Celý princip spočívá ve vlastním handleru softwarového přerušení klávesnice INT9. Možná si myslíte, že je to zavání praktikami virů a vůbec všech magických programů, které dokáží vymlátit z počítače všechno možné, ale ono to v podstatě jinak nelze. Nastavení vlastního klávesnicového handleru získáte obrovské množství výhod, o kterých se vám před tím ani nesnilo. Odpadá používání trapného ReadKey a podobné násilnické funkce, klávesnice bude pod vaší kontrolu a pokud budete chtít, aby se vám někdo na INT9 nemotal, stačí použít obnovovací stealth metodu, kterou ovšem doporučuji pouze pro pokročilé programátory. V neposlední řadě si můžete dělat se scankódy stisklých kláves cokoli, třeba je úplně vyřadit z funkce nebo je používat v neomezeném množství třeba ve hře, která by měla zvládat třeba 6 klávesnicových hráčů najednou. V průběhu programu se nebudete vůbec muset starat o to,jestli se má zrovna teď číst klávesa nebo ne. Prostě si kdykoli porovnáte proměnnou, do které vám váš handler ukládá scan kód poslední stisklé klávesy a provedete požadovanou funkci. Nebo si můžete vytvořit vlastní buffer pro stisklé klávesy a s ním pak pracovat. Nechci nijak snižovat filozofii BIOSu a na něm závislých kompilátorů high-level jazyků, ale vlastní handler klávesnice je to nejlepší řešení. Jak na to v praxi ? Je to velice jednoduché stačí akorát znát příslušné číslo portu odkud vám klávesnice bude posílat scankódy. Ostatní už obstará Pascal. Zde je příklad, jak by takový jednoduchý prográmek, který používá vlastní ovladač klávesnice měl vypadat: Uses Dos; Var OldKeyBHandler : Procedure; UseBIOSHandler : Boolean; KeyPressed : Byte; {F+} Procedure MyKeyBHandler(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: Word); Interrupt; begin KeyPressed:=Port[60]; if UseBIOSHandler then begin asm pushf end; OldKeyBHandler; end else Port[20]:=20; end; {F-} Begin UseBIOSHandler:=False; GetIntVec(9,@OldKeyBHandler); SetIntVec(9,@MyKeyBHandler); ...... V programu můžete i rychle přepnout zpět do staré BIOS klávesnice pomocí UseBIOSHander, pokud je to potřeba (například při použití některých Pascalských funkcí nebo pokud už máte nějaké vaše starší funkce, které pracují se základním BIOS handlerem...). ...... SetIntVec(9,@OldKeyboardHandler); End. Na závěr přikládám oficiální scankódy kláves, které vám bude posílat klávesnice přes port 60. Jsou v podstatě podobné jako v ASCII konvenci, ale pozor na výjimky ! Také si možná všimnete další velké výhody, jelikož ASCII konvence neuznává tzv. stavové kávesy jako Ctrl, Alt, Shift, musí se za normálních okolností ohlídávat jejich stisk různými prasáckými způsoby, které zde nebudu radši osvětlovat. Při použití vlastního handleru je po problémech. Každá klávesa má ve skutečnosti dva scankódy, ten první (kódy zapsané v tabulce) určuje zda-li je určitá klávesa právě stisknutá, potom existuje ještě druhý scan kód, který odpovídá klávese, která byla naposledy stisknuta, tento scankód zpravidla odpovídá scankódu při stisku klávesy plus 128. Existuje také speciální scankód (E0), který určuje, zdali je právě stisknutá klávesa držena dostatečně dlouho, aby se v programu aktivovala určitá specifická funkce, jako například v Nortonu, když chvíli podržíte šipkovou klávesu, začne vám rychleji scrolovat menu-bar, kterým vybíráte fajly. 1 Esc 44 z 2 1 45 x 3 2 46 c 4 3 47 v 5 4 48 b 6 5 49 n 7 6 50 m 8 7 51 , < 9 8 52 . > 10 9 53 / ? 11 0 54 Right-Shift 12 - _ 55 * (keypad) 13 = + 56 Left-Alt 14 BackSpace 57 SpaceBar 15 Tab 58 Caps-Lock 16 q 59 F1 17 w 60 F2 18 e 61 F3 19 r 62 F4 20 t 63 F5 21 y 64 F6 22 u 65 F7 23 i 66 F8 24 o 67 F9 25 p 68 F10 26 [ { 69 Num-Lock (keypad) 27 ] } 70 Scroll-Lock 28 Enter (Return) 71 7 Home (keypad) 29 Left-Arrow 72 8 Up (keypad) 30 a 73 9 PgUp (keypad) 31 s 74 - (keypad) 32 d 75 4 Left (keypad) 33 f 76 5 (keypad) 34 g 77 6 Right (keypad) 35 h 78 + (keypad) 36 j 79 1 End (keypad) 37 k 80 2 Down (keypad) 38 l 81 3 PgDn (keypad) 39 ; : 82 0 Insert (keypad) 40 ' " 83 . Del (keypad) 41 ' 87 F11 42 Left Shift 88 F12 28 Enter (keypad) 75 Left (not keypad) 29 Right-Arrow 77 Right (not keypad) 42 Print-Screen 79 End (not keypad) 53 / (keypad) 80 Down (not keypad) 55 Print-Screen 81 Page-Down (not keypad) 56 Right-Alt 82 Insert (not keypad) 71 Home (not keypad) 83 Delete (not keypad) 72 Up (not keypad) 111 Macro 73 Page-Up (not keypad) Pro majitele klávesnice Windows 95 tu mám scankódy speciálních kláves s hnusným okýnkem a nějakým menu s šipkou, nebo co to je :) To levý okýnko má 91, pravý 92 a to menu 93. Jako nápad zlepšení klávesnice to není špatné, ale o použití radši ani mluvit nebudu. Nejlepší cesta, jak sabotovat Microsoft, je, udělat programy, které budou tyto klávesy využívat pro svojí vlastní potřebu a Wokna budou mít smůlu. Taky to chce hromadně vydat přelepky... ReDox výheň