| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3580 人关注过本帖
标题:用c语言编写关于按键的问题
取消只看楼主 加入收藏
恩怨情仇
Rank: 1
等 级:新手上路
帖 子:61
专家分:2
注 册:2008-11-8
结帖率:71.43%
收藏
已结贴  问题点数:1 回复次数:1 
用c语言编写关于按键的问题
         今天看了坛里朋友写的一些游戏代码,但是游戏里面的关于一些按键还是不明白,查看了一些关于键盘码的资料,不过还是不明白。比如说:
/*define key-value*/
#define ENTER 0x1c0d
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
 
#define ESC 0x011b
#define SPACE 0x3920
 
#define LOWERF 0x2166
下面是引用我看的书你面对按键码的解释:

 
是否有键按下,何键按下,简单的应用中可采用两种办法:一是直接使用 Turbo C提供
的键盘操作函数 bioskey()来识别,二是通过第一章 1.2.4.3 节介绍的 int86()函数,调用 BIOS
的 INT 16H,功能号为 0 的中断。它将按键的扫描码存放在 Ax 寄存器的高字节中。
函数 bioskey()的原型为:
int bioskey(int cmd);
它在 bios.h 头文件中进行了说明,参数 cmd 用来确定 bioskey()如何操作:
cmd   操作
0  bioskey()返回按健的键值,该值是 2个字节的整型数。若没有键按下,则该函数一
直等待,直到有键按下。当按下时,若返回值的低 8 位为非零,则表示为普通键,
其值代表该键的 ASCII 码。若返回值的低 8 位为 0,则高8位表示为扩展的 ASCII
码,表示按下的是特殊功能键。
1  bioskey()查询是否有键按下。若返回非 0 值,则表示有键按下,若为 0表示没键按
下。
2  bioskey()将返回一些控制键是否被按过,按过的状态由该函数返回的低 8位的各位
值来表示:
字节位   对应的 16 进制数   含义
0   0x01     右边的 shift 键被按下
1   0x02     左边的 shift 键被按下
2   0x04    Ctrl 键被按下   9
3   0x08     Alt 键被按下
4   0x10     Scroll Lock 已打开
5   0x20    Num Lock 已打开
6   0x40    Caps Lock 已打开
7   0x80     Inset 已打开
当某位为 l 时,表示相应的键已按,或相应的控制功能已有效,如选参数 cmd 为 2,
若 key值为 0x09,则表示右边的 shift 键被按,同时又按了 Alt 键。



按照书上看的论坛朋友些那些关于按键的宏定义一些十六进制的数是怎么回事,怎么得来的。有相关书籍吗?希望那位朋友帮忙解释一下。
 
搜索更多相关主题的帖子: c语言 编写 
2009-11-22 10:44
恩怨情仇
Rank: 1
等 级:新手上路
帖 子:61
专家分:2
注 册:2008-11-8
收藏
得分:0 
键盘码对照表:
C语言中键盘扫描码如何使用?zz2008-11-14 16:21就是利用bioskey()得到的值。

参数为0时,bioskey()的返回值如果低八位非0,表示按下了普通键;如果低八位为0,表示按下了功能键。

参数为1时,检测有没有键被按下,如果返回值为0,表示没有键按下,相反有键按下。

参数为2时,表示获取变换键的状态,哪些是变换键呢?变换键包括双态键和控制键,双态键就是num lock、scroll lock、insert和caps lock,控制键就是左右shift、ctrl和alt,返回值的低八位反映了这些变换键的状态:

0x01    右边shift
0x02    左边shift
0x04    ctrl键
0x08    alt键
0x10    scroll lock打开
0x20    num lock打开
0x40    caps lock打开
0x80    insert打开

其实bioskey直接调用bios的int 16h键盘I/O中断,直接就是int 16h的完整翻版。




键盘扫描码大全



对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用

到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时使用.在此跟大家分享一下,虽

然得来非常容易,但至少可以免得大家都像我以前那样用时再查

扫描码        
0x011b        ESC
0x3b00        F1
0x3c00        F2
0x3d00        F3
0x3e00        F4
0x3f00        F5
0x4000        F6
0x4100        F7
0x4200        F8
0x4300        F9
0x4400        F10
主键盘区:

0x2960        ~
0x0231        1
0x0332        2
0x0433        3
0x0534        4
0x0635        5
0x0736        6
0x0837        7
0x0938        8
0x0a39        9
0x0b30        0
0x0c2d        -
0x0d3d        =
0x2b5c        \
0x0e08        退格键
0x0f09        Tab
0x1071        q
0x1177        w
0x1265        e
0x1372        r
0x1474        t
0x1579        y
0x1675        u
0x1769        i
0x186f        o
0x1970        p
0x1a5b        [
0x1b5d        ]
0x1e61        a
0x1f73        s
0x2064        d
0x2166        f
0x2267        g
0x2368        h
0x246a        j
0x256b        k
0x266c        l
0x273b        ;
0x2827        '
0x1c0d        回车
0x2c7a        z
0x2d78        x
0x2e63        c
0x2f76        v
0x3062        b
0x316e        n
0x326d        m
0x332c        ,
0x342e        .
0x352f        /
0x3920        空格键
右边数字键盘:

0x5200        Insert
0x4700        Home
0x4900        Page UP
0x5300        Delete
0x4f00        End
0x5100        PageDown
0x4800        上箭头
0x4b00        左箭头
0x5000        下箭头
0x4d00        右箭头
0x352f        /
0x372a        *
0x4a2d        - (注意,这是数字键盘的)
0x4737        7
0x4838        8
0x4939        9
0x4b34        4
0x4c35        5
0x4d36        6
0x4e2b        +
0x4f31        1
0x5032        2
0x5133        3
0x5230        0
0x532e        Del



Ctrl+字母: 在字母扫描码的基础上减去0x0060
alt+字母:   在字母的基础上,把最后两位变成00
shift+字母: 在字母的基础上减去0x0020
比如: a----0x1e61    Ctrl+a----0x1e01   Alt+a-----0x1e00
       b----0x3062    Ctrl+b----0x3002   Alt+b-----0x3000
另加: Ctrl+Enter:    0x1c0a


可以直接用一个程序查看的 很简单的
#include <stdio.h>
#include <bios.h>
void main(void)
{
int key, modifiers;
while ((key=bioskey(0)) != 0 && key!=0x11b){
   printf("0x%x \n",key);
}

}


*********************************************************************************************
上面列出的编码中,前面两位是“扫描码”,后面两位是ASCII码,合起来是所谓的“键盘码”
比如,小键盘的数字键扫描码和大键盘的数字键是不同的,而后两位是一样的,因为那个是它们共用的ASCII码

下面就是扫描码的列表

Keyboard Scan Codes (Numerical Order)

---------------+---------------+---------------+---------------+---------------
HEX DEC keys   |HEX DEC keys   |HEX DEC keys   |HEX DEC keys   |HEX DEC keys
---------------+---------------+---------------+---------------+---------------
               |10  16  Q      |20  32  D      |30  48  B      |40  64  F6
01   1  ESC    |11  17  W      |21  33  F      |31  49  N      |41  65  F7
02   2  1      |12  18  E      |22  34  G      |32  50  M      |42  66  F8
03   3  2      |13  19  R      |23  35  H      |33  51  ,      |43  67  F9
04   4  3      |14  20  T      |24  36  J      |34  52  .      |44  68  F10
05   5  4      |15  21  Y      |25  37  K      |35  53  /      |45  69  Num
06   6  5      |16  22  U      |26  38  L      |36  54  R Shift|46  70  Scroll
07   7  6      |17  23  I      |27  39  ;      |37  55  PrtSc  |47  71  Home
08   8  7      |18  24  O      |28  40  '      |38  56  Alt    |48  72  Up
09   9  8      |19  25  P      |29  41  `      |39  57  Space  |49  73  PgUp
0A  10  9      |1A  26  [      |2A  42  L Shift|3A  58  Caps   |4A  74  -
0B  11  0      |1B  27  ]      |2B  43  \      |3B  59  F1     |4B  75  Left
0C  12  -      |1C  28         |2C  44  Z      |3C  60  F2     |4C  76  Center
0D  13  =      |1D  29  CTRL   |2D  45  X      |3D  61  F3     |4D  77  Right
0E  14  bs     |1E  30  A      |2E  46  C      |3E  62  F4     |4E  78  +
0F  15  Tab    |1F  31  S      |2F  47  V      |3F  63  F5     |4F  79  End
---------------+---------------+---------------+---------------+---------------
50  80  Down   |               |               |               |
51  81  PgDn   |               |               |               |
52  82  Ins    |               |               |               |
53  83  Del    |               |               |               |
---------------+---------------+---------------+---------------+---------------

Keyboard Scan Codes (Read from Port HEX 60 = DEC 96) (Keyboard Layout)

Top number    ... DEC
Bottom number ... HEX

+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+
|F1|F2|ESC| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BkS|Num Lok|Scr Lok|
|  |  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       |       |
|59|60| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 |  69   |  70   |
|3B|3C|01 |02 |03 |04 |05 |06 |07 |08 |09 |0A |0B |0C |0D |0E |  45   |  46   |
+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+
|F3|F4|TAB| Q | W | E | R | T | Y | U | I | O | P | [ | ] |   | 7 3 8 | 9 3 - |
|  |  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   3   |   3   |
|61|62|15 |16 |17 |18 |19 |20 |21 |22 |23 |24 |25 |26 |27 |   |71 372 |73 374 |
|3D|3E|0F |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |1A |1B |   |47 348 |49 34A |
+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+
|F5|F6|CTR| A | S | D | F | G | H | J | K | L | ; | ' | ` |28 | 4 3 5 | 6 3   |
|  |  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   3   |   3   |
|63|64|29 |30 |31 |32 |33 |34 |35 |36 |37 |38 |39 |40 |41 |   |75 376 |77 3   |
|3F|40|1D |1E |1F |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 |   |4B 34C |4D 3   |
+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+
|F7|F8|Shf| \ | Z | X | C | V | B | N | M | , | . | / |Shf|Prt| 1 3 2 | 3 3 + |
|  |  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   3   |   3   |
|65|66|42 |43 |44 |45 |46 |47 |48 |49 |50 |51 |52 |53 |54 |55 |78 380 |81 378 |
|41|42|2A |2B |2C |2D |2E |2F |30 |31 |32 |33 |34 |35 |36 |37 |4F 350 |51 34E |
+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+
|F9|F0|  A|t  |   |   |   |   |pac|   |   |   |   |Cap|Lok|  I|s  3  D|l  3   |
|  |  |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   3   |   3   |
|67|68|  5|   |   |   |   |   |57 |   |   |   |   |  5|   |  8|   3  8|   3   |
|43|44|  3|   |   |   |   |   |39 |   |   |   |   |  3|   |  5|   3  5|   3   |
+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+

Extended ASCII Special Key Codes (Numerical Order)
... composed of 2 bytes, the 2nd byte being 00 (00 signifies that the special codes are to be applied.)

HEX DEC   keys
-------------------------------
03   3  CTRL-2; same as CHR$(0)
0F  15  Shift-tab
10  16  Alt-Q
11  17  Alt-W
12  18  Alt-E
13  19  Alt-R
14  20  Alt-T
15  21  Alt-Y
16  22  Alt-U
17  23  Alt-I
18  24  Alt-O
19  25  Alt-P
1E  30  Alt-A
1F  31  Alt-S
20  32  Alt-D
21  33  Alt-F
22  34  Alt-G
23  35  Alt-H
24  36  Alt-J
25  37  Alt-K
26  38  Alt-L
2C  44  Alt-Z
2D  45  Alt-X
2E  46  Alt-C
2F  47  Alt-V
30  48  Alt-B
31  49  Alt-N
32  50  Alt-M
3B  59  F1
3C  60  F2
3D  61  F3
3E  62  F4
3F  63  F5
40  64  F6
41  65  F7
42  66  F8
43  67  F9
44  68  F10
47  71  Home
48  72  Up
49  73  PgUp
4B  75  Left
4D  77  Right
4F  79  End
50  80  Down
51  81  PgDn
52  82  Ins
53  83  Del
54  84  Shift-F1
55  85  Shift-F2
56  86  Shift-F3
57  87  Shift-F4
58  88  Shift-F5
59  89  Shift-F6
5A  90  Shift-F7
5B  91  Shift-F8
5C  92  Shift-F9
5D  93  Shift-F10
5E  94  Ctrl-F1
5F  95  Ctrl-F2
60  96  Ctrl-F3
61  97  Ctrl-F4
62  98  Ctrl-F5
63  99  Ctrl-F6
64 100  Ctrl-F7
65 101  Ctrl-F8
66 102  Ctrl-F9
67 103  Ctrl-F10
68 104  Alt-F1
69 105  Alt-F2
6A 106  Alt-F3
6B 107  Alt-F4
6C 108  Alt-F5
6D 109  Alt-F6
6E 110  Alt-F7
6F 111  Alt-F8
70 112  Alt-F9
71 113  Alt-F10
72 114  Ctrl-PrtSc
73 115  Ctrl-Left
74 116  Ctrl-Right
75 117  Ctrl-End
76 118  Ctrl-PgDn
77 119  Ctrl-Home
78 120  Alt-1
79 121  Alt-2
7A 122  Alt-3
7B 123  Alt-4
7C 124  Alt-5
7D 125  Alt-6
7E 126  Alt-7
7F 127  Alt-8
80 128  Alt-9
81 129  Alt-0
82 130  Alt--
83 131  Alt-=
84 132  Ctrl-PgUp
85 133  Ctrl-Up
86 134  Ctrl--(num)
87 135  Ctrl-Center
88 136  Ctrl-+(num)
89 137  Ctrl-Down
8A 138  Ctrl-Ins
8B 139  Ctrl-Del
8C 140  Alt-Home
8D 141  Alt-Up
8E 142  Alt-PgUp
8F 143  Alt--(num)
90 144  Alt-Left
91 145  Alt-Center
92 146  Alt-Right
93 147  Alt-+(num)
94 148  Alt-End
95 149  Alt-Down
96 150  Alt-PgDn
97 151  Alt-Ins
98 152  Alt-Del

Extended ASCII Special Key Codes (Keyboard Layout)

------------------+-------------------+-------------------+--------------------
HEX DEC keys      | HEX DEC keys      | HEX DEC keys      | HEX DEC keys
------------------+-------------------+-------------------+--------------------
03   3  nul       | 0F  15  Shift-tab | 72 114  Ctrl-PrtSc|
------------------+-------------------+-------------------+--------------------
47  71  Home      |                   | 77 119  Ctrl-Home | 8C 140  Alt-Home
48  72  Up        |                   | 85 133  Ctrl-Up   | 8D 141  Alt-Up
49  73  PgUp      |                   | 84 132  Ctrl-PgUp | 8E 142  Alt-PgUp
4A  74  -(num)    |                   | 86 134  Ctrl--(nu)| 8F 143  Alt--(num)
4B  75  Left      |                   | 73 115  Ctrl-Left | 90 144  Alt-Left
4C  76  Center    |                   | 87 135  Ctrl-Centr| 91 145  Alt-Center
4D  77  Right     |                   | 74 116  Ctrl-Right| 92 146  Alt-Right
4E  78  +(num)    |                   | 88 136  Ctrl-+(nu)| 93 147  Alt-+(num)
4F  79  End       |                   | 75 117  Ctrl-End  | 94 148  Alt-End
50  80  Down      |                   | 89 137  Ctrl-Down | 95 149  Alt-Down
51  81  PgDn      |                   | 76 118  Ctrl-PgDn | 96 150  Alt-PgDn
52  82  Ins       |                   | 8A 138  Ctrl-Ins  | 97 151  Alt-Ins
53  83  Del       |                   | 8B 139  Ctrl-Del  | 98 152  Alt-Del
------------------+-------------------+-------------------+--------------------
3B  59  F1        | 54  84  Shift-F1  | 5E  94  Ctrl-F1   | 68 104  Alt-F1
3C  60  F2        | 55  85  Shift-F2  | 5F  95  Ctrl-F2   | 69 105  Alt-F2
3D  61  F3        | 56  86  Shift-F3  | 60  96  Ctrl-F3   | 6A 106  Alt-F3
3E  62  F4        | 57  87  Shift-F4  | 61  97  Ctrl-F4   | 6B 107  Alt-F4
3F  63  F5        | 58  88  Shift-F5  | 62  98  Ctrl-F5   | 6C 108  Alt-F5
40  64  F6        | 59  89  Shift-F6  | 63  99  Ctrl-F6   | 6D 109  Alt-F6
41  65  F7        | 5A  90  Shift-F7  | 64 100  Ctrl-F7   | 6E 110  Alt-F7
42  66  F8        | 5B  91  Shift-F8  | 65 101  Ctrl-F8   | 6F 111  Alt-F8
43  67  F9        | 5C  92  Shift-F9  | 66 102  Ctrl-F9   | 70 112  Alt-F9
44  68  F10       | 5D  93  Shift-F10 | 67 103  Ctrl-F10  | 71 113  Alt-F10
------------------+-------------------+-------------------+--------------------
1E  30  Alt-A     | 31  49  Alt-N     | 78 120  Alt-1     |
30  48  Alt-B     | 18  24  Alt-O     | 79 121  Alt-2     |
2E  46  Alt-C     | 19  25  Alt-P     | 7A 122  Alt-3     |
20  32  Alt-D     | 10  16  Alt-Q     | 7B 123  Alt-4     |
12  18  Alt-E     | 13  19  Alt-R     | 7C 124  Alt-5     |
21  33  Alt-F     | 1F  31  Alt-S     | 7D 125  Alt-6     |
22  34  Alt-G     | 14  20  Alt-T     | 7E 126  Alt-7     |
23  35  Alt-H     | 16  22  Alt-U     | 7F 127  Alt-8     |
17  23  Alt-I     | 2F  47  Alt-V     | 80 128  Alt-9     |
24  36  Alt-J     | 11  17  Alt-W     | 81 129  Alt-0     |
25  37  Alt-K     | 2D  45  Alt-X     | 82 130  Alt--     |
26  38  Alt-L     | 15  21  Alt-Y     | 83 131  Alt-=     |
32  50  Alt-M     | 2C  44  Alt-Z     |                   |
------------------+-------------------+-------------------+-----------
 
http://hi.baidu.com/wang1901/blog/item/68c0930a64689e39b1351d9c.html
2009-11-22 19:04
快速回复:用c语言编写关于按键的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043667 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved