| Ins : Bit = $60; {128}

| Caps : Bit*$40; { 64}

| Num : Bit = $20; { 32}

| Scroll : Bit = $10 { 16}

| end; {case}

| if ( Mem[0:$417] and Bit ) = Bit { бит включен? }

| then GetLockKey := True { да }

| else GetLockKey := False { нет }

| END;

| PROCEDURE SetLockKey( Lock : КеуТуре; В : Boolean );

| VAR

| M : Byte absolute 0:$417; { байт состояния }

| Bit : Byte;

| BEGIN

| case Lock of

| Ins Bit := $60; {128}

| Caps Bit := $40; { 64}

| Num Bit := $20; { 32}

| Scroll Bit := $10 { 16}

| end; {case}

| case В of

| True : M := M or Bit; { включить xxxLock }

| False : M := M and (255-Bit); { выключить xxxLock }

| end {case}

| END;

Рис. 21.9

- 505 -

| BEGIN { ПРИМЕР ВЫЗОВОВ }

| SetLockKey( Caps, True );

| { включить CapsLock }

| Write( 'Введите любой текст ' );

| ReadLn;

| SetLockKey(Caps, not GetLockKey(Caps));

| { наоборот } Write( 'Режим стал обратным ');

| ReadLn;

| END.

Рис. 21.9 (окончание)

Пример на рис. 21.9 переключает режимы, но не влияет на свечение индикаторов, которое управляется на разных классах ПЭВМ через различные порты.

С помощью подобных функций программа может так управлять вводом, что не будет нужды нажимать клавиши регистров. Сам факт нажатия клавиш регистров Shift, Ctrl и Alt может быть программно проанализирован путем опроса ячеек памяти 0:$417 и 0:$418. Если, например, надо проверить, нажата ли левая клавиша Shift (бит 1 в байте 0:$417 равен 1), то логическая функция должна иметь следующий вид:

if (Mem[0:$417] and 2) = 2 then ... {да, левый Shift нажат}

else ... { нет };

Если надо проверить нажатие правой и левой клавиш Shift одновременно, то условие немного изменится:

if (Mem[0:$417] and (2+1))=(2+1) then {да, обе Shift нажаты}

else { нет };

Подобные опросы можно применять при написании процедур запроса паролей, если паролем доступа к работе с программой делать комбинации типа Alt+Shift и т.п. Но подобная система опроса работает только при длительном нажатии клавиш регистров. Ведь в момент нажатия программа может не анализировать состояние регистров, и тогда информация проскочит «мимо». Четко отловить факт нажатия клавиш регистров можно лишь с помощью анализа скэн-кодов клавиш, перехватывая прерывания от клавиатуры (см. пример на рис. 21.11).

<p>21.6. Скэн-коды клавиатуры и работа с ними</p>

Чтение скэн-кодов клавиш — это самый низкий уровень программного опроса клавиатуры. Каждая нажатая клавиша выдает свой

- 506 -

уникальный скэн-код, который зависит только от ее местоположения на клавиатуре и никак не зависит от того, что под ней понимается. Так, арифметические знаки на алфавитной и цифровой клавиатурах имеют различные скэн-коды. Скэн-коды полностью совместимой с IBM PC ПЭВМ приведены в табл. 21. 2.

Таблица 21. 2

Клавиша

Скэн-код

(16)

Скэн-код

(10)

Клавиша

Скэн-код

(16)

Скэн-код

(10)

Esc

$01

1

Z

$2C

44

!1

$02

2

X

$2D

45

@2

$03

3

C

$2E

46

#3

$04

4

V

$2F

47

$4

$05

5

B

$30

48

%5

$06

6

N

$31

49

^6

$07

7

M

$32

50

&7

$08

8

<,

$33

51

*8

$09

9

>.

$34

52

(9

$0A

10

?/

$35

53

)0

$0B

11

Shift(правый)

$36

54

_-

$0C

12

PrintScreen

$37

55

+=

$0D

13

Alt

$38

56

BackSpace

$0E

14

Пробел

$39

57

TAB

$0F

15

CapsLock

$3A

58

Q

$10

16

F1

$3B

59

W

$11

17

F2

$3C

60

E

$12

18

F3

$3D

61

R

$13

19

F4

$3E

62

T

$14

20

F5

$3F

63

Y

$15

21

F6

$40

64

U

$16

22

F7

$41

65

I

$17

23

F8

$42

66

O

$18

24

F9

$43

67

P

$19

25

F10

$44

68

{[

$1A

26

NumLock

$45

69

}]

$1B

27

ScrollLock

$46

70

Enter

$1C

28

7 Home

$47

71

Ctrl

$1D

29

8 Вверх

$48

72

- 507 -

A

$1E

30

9 PgUp

$49

73

S

$1F

31

Серый -

$4A

74

D

$20

32

4 Влево

$4B

75

F

$21

33

$4C

76

G

$22

34

6 Вправо

$4D

77

H

$23

35

Серый +

$4E

78

J

$24

36

1 End

$4F

79

K

$25

37

2 Вниз

$50

80

L

$26

38

3 PgDn

$51

81

:;

$27

39

0 Ins

$52

82

“ '

$28

40

. Del

$53

83

~`

$29

41

F11

$D9

217

Shift (левый)

$2A

42

F12

$DA

218

|\

$2B

43

Проверить правильность этой таблицы на любой другой ПЭВМ (с MS-DOS и Турбо Паскалем, конечно) можно при помощи программы опроса скэн-кода нажатой клавиши (рис. 21. 10).

Перейти на страницу:

Поиск

Похожие книги