You are on page 1of 6

Chng 2

Bi 7: Nng cao: nhn thng ip t bn phm Bi trc ti trnh by vi cc bn v cch nhn thng ip t bn phm, cch n gin v thng c dng trong trng hp chng ta khng cn phi x l ngay lp tc thng ip t bn phm m c th i cc thng ip khc trc.Vic ny s khc khi bn lp trnh game, v trong lp trnh game bn cn x l tht nhanh bn phm cho mi s biu din cng nh x l game ging tht nht. Bi Minh Trng Kosen01

Trong bi ny bn s c hc cch nhn thng ip t bn phm ngoi hm WinProc.Trc ht chng ta khai bo mt hm m chng ta s x dng, t tn n l KeyPressed(char key); hm ny co nhim v kim tra xem phm key c c nhn hay khng. Windows c mt vng b nh cha trng thi cc phm, mi trng thi c mt gi tr chng ta ch vic kim tra trng thi l chng ta c th xc nh c phm c c nhn hay khng?Nu bt cao ca trng thi l 1 c ngha l phm c nhn, cn 0 c ngha khng c nhn.Bn c th thc mc cn bt thp ca n?Bt thp ca n c dng vo vic kim tra cc phm chuyn gia hai trng thi v d phm CAPS LOCK, NUM LOCK, SCROLL LOCK, nu bt thp ca trng thi cc phm ny l 1 th phm ny c nhn hay chng ang c bt v ngc li nu n l 0 th n cha c bt.Vy lm sao chng ta c th ly c trng thi ca cc phm?Windows cung cp cho chng ta mt hm rt tin li dng vo vic ny, l hm GetKeyboardState(keyboard); trong keyboard l mt mng cha cc trng thi ca cc phm, di y ti xin trnh by m ngun ca hm ny: // y l mng cha trng thi ca tt c cc phm trn bn phm BYTE keyboard[256] = {0}; // tin li cho vic kim tra bt cao v bt thp ca trng thi ta nh ngha hai gi tr sau #define HIGH_BIT 0x80 // Bt cao (gi tr trong bng nh phn l 10000000) #define LOW_BIT 0x01 // Bt thp (gi tr trong bng nh phn l 00000001) // hm ny chng ta cng ch xt cc phm l cc k t cho n gin, bn c th m rng theo ca mnh bool KeyPressed(char key) { //Nu phm c nhn khng phi l k t abc th chng ta s tr cho hm gi tr false v thot ra if(isalpha(key) == false) return false; //Hm ny s in y cc gi tr trng thi ca phm vo mng khai bo trn

GetKeyboardState(keyboard); /*Chng ta nhn c cc trng thi ca tt c cc phm v by gi chng ta kim tra. By gi xem phm(key) m chng ta cn kim tra xem c phi l lowercase khng?*/ if(islower(key)) // Kim tra nu l lowercase { /*Nu phm CAPS LOCK bt hoc phm SHIFT ang c gi th khng th c lowercase. V th hm ny s tr v false, v d KeyPressed('a') s tr v false, v khng th g c 'a'*/ if((keyboard[VK_SHIFT] & HIGH_BIT) || (keyboard[VK_CAPITAL] & LOW_BIT)) return false; /*Thc ra khi phm caps lock bt v ta gi phm shift th vn c lowercase. Nhng chng ta b qua chng trnh n gin. Trong bng m phm o ch c m ca cc phm uppercase, v vy mun kim tra xem phm kiu lowercase c nhn hay khng ta s chuyn chng thnh uppercase, v gi tr trng thi ca phm trong mng ca phm uppercase ging gi tr trng thi ca phm lowercase*/ key = toupper(key); //Chuyn chng thnh uppercase /*dng lnh di y, c ngha nh sau nu bt cao ca gi tr trng thi phm key bng 1 th khi dng php AND vi gi tr HIGH_BIT th kt qu s l HIGHT_BIT v tr v true cho hm s ny, ngc li nu n khc 1, khi AND vi HIGH_BIT n s cho gi tr khc HIGH_BIT ton t "==" s tr v gi tr false*/ return ((keyboard[key] & HIGH_BIT) == HIGH_BIT); } else { /*Nu phm m chng ta mun kim tra l uppercase, v ch c 2 cch chng ta g c uppercase l khi ta nhn phm shift hoc phm caps lock c bt, chng ta kim tra c 2 trng hp*/ if((keyboard[key] & HIGH_BIT) && (keyboard[VK_SHIFT] & HIGH_BIT)) return true; //Phm c nhn ng thi phm shift cng nhn //Di y ta kim tra xem phm caps lock c c bt khng else if((keyboard[key] & HIGH_BIT) && (keyboard[VK_CAPITAL] & LOW_BIT)) return true; } return false; // tr v false nu phm "key" khng c nhn. } Tip theo ti xin gii thiu vi bn cch x dng hm ny.Ti xin xy dng mt v d n gin , xin tham kho trong m code ca chng trnh ny trong th mc keyboard phn 2.Ti ch mun ni qua cch dng l khi bn mun xem phm "key" c c nhn hay khng bn thm hm KeyPresssed(key) vo phn else{} trong vng lp ca hm winmain, ri t bn c th x l g cng c:

while(1) { if(PeekMessage(&msg,hwnd,0,0,PM_REMOVE)) { if(msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { if (KeyPressed('G') || KeyPressed('a') || KeyPressed('m') || KeyPressed('e') || KeyPressed('V') || KeyPressed('I') || KeyPressed('E') || KeyPressed('T') ) { uchar red = rand()%256; uchar green = rand()%256; uchar blue = rand()%256; PrintColoredText(hwnd,"vcsj.net",red,green,blue); } Sleep(100); } } Di y l ton b m phm o , bn hy tham kho v p dng vo chng trnh ca mnh: Virtual Code VK_LBUTTON VK_RBUTTON VK_CANCEL VK_MBUTTON VK_BACK VK_TAB VK_CLEAR VK_RETURN VK_SHIFT VK_CONTROL VK_MENU VK_PAUSE VK_CAPITAL VK_ESCAPE VK_SPACE Hex Value 01 02 03 04 08 09 0C 0D 10 11 12 13 14 1B 20 "Key" left mouse button right mouse button control-break processing middle mouse button (three-button mouse) backspace tab clear enter shift ctrl alt pause caps lock esc spacebar

VK_PRIOR VK_NEXT VK_END VK_HOME VK_LEFT VK_UP VK_RIGHT VK_DOWN VK_SELECT VK_EXECUTE VK_SNAPSHOT VK_INSERT VK_DELETE VK_HELP VK_0 VK_1 VK_2 VK_3 VK_4 VK_5 VK_6 VK_7 VK_8 VK_9 VK_A VK_B VK_C VK_D VK_E VK_F VK_G VK_H VK_I VK_J VK_K VK_L VK_M

21 22 23 24 25 26 27 28 29 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D

page up page down end key home key left arrow up arrow right arrow down arrow select key execute key print screen key insert key delete key help key 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m

VK_N VK_O VK_P VK_Q VK_R VK_S VK_T VK_U VK_V VK_W VK_X VK_Y VK_Z VK_NUMPAD0 VK_NUMPAD1 VK_NUMPAD2 VK_NUMPAD3 VK_NUMPAD4 VK_NUMPAD5 VK_NUMPAD6 VK_NUMPAD7 VK_NUMPAD8 VK_NUMPAD9 VK_MULTIPLY VK_ADD VK_SUBTRACT VK_DECIMAL VK_DIVIDE VK_F1 VK_F2 VK_F3 VK_F4 VK_F5 VK_F6 VK_F7 VK_F8

4E 4F 50 51 52 53 54 55 56 57 58 59 5A 60 61 62 63 64 65 66 67 68 69 6A 6B 6D Subtract key 6E 6F 70 71 72 73 74 75 76 77

n o p q r s t u v w x y z Numeric keypad 0 key Numeric keypad 1 key Numeric keypad 2 key Numeric keypad 3 key Numeric keypad 4 key Numeric keypad 5 key Numeric keypad 6 key Numeric keypad 7 key Numeric keypad 8 key Numeric keypad 9 key Multiply key Add key Separator key Decimal key Divide key f1 key f2 key f3 key f4 key f5 key f6 key f7 key f8 key

VK_SEPARATOR 6C

VK_F9 VK_F10 VK_F11 VK_F12 VK_NUMLOCK VK_SCROLL

78 79 7A 7B 90 91

f9 key f10 key f11 key f12 key num lock key scroll lock key

By gi bn c th x l bn phm mt cch hon ho, v chng ta hy tip tc chinh phc windows trong cc bi tip sau y. Bn ch thc hnh v t ci t mt chng trnh no minh thch.

You might also like