中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 15:32
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 为什么 bioskey()对SHIFT等几个功能键无效? 查看 949 回复 2
楼 主 为什么 bioskey()对SHIFT等几个功能键无效? 发表于 2007-03-03 11:05 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
代码如下:
(对其他键都有效,但按下SHIFT等键程序无反应!)
怎么回事? 用中断函数也这样.是不是 CONFIG.SYS中要什么配置?


#include <stdio.h>
#include <bios.h>
#include <ctype.h>
main()
{
int key1=0,key2=0;

while(!bioskey(1));
key1=bioskey(0);
key2=bioskey(2);

printf("%X,%X\n",key1,key2);

}

[ Last edited by GOTOmsdos on 2007-3-3 at 11:46 AM ]
2 发表于 2007-03-04 00:38 ·  中国 广东 深圳 宝安区 电信
高级用户
★★
积分 668
发帖 295
注册 2005-07-26 00:00
21年会员
UID 41110
性别 男
来自 广东深圳
状态 离线
//不能用bioskey()读到,可从bois数据区中获得!

//WinSail V2.0有一个函数AfxKeyboardState,其代码是这样的


#define KEYBOARD_STATE_RSHIFT 0
#define KEYBOARD_STATE_LSHIFT 1
#define KEYBOARD_STATE_CTRL 2
#define KEYBOARD_STATE_ALT 3
#define KEYBOARD_STATE_SCROLLLOCK 4
#define KEYBOARD_STATE_NUMLOCK 5
#define KEYBOARD_STATE_CAPSLOCK 6
#define KEYBOARD_STATE_INSERT 7

//函数名称:AfxKeyboardState
//函数功能:
//入口参数:int nState --- 要判断的按键
= KEYBOARD_STATE_RSHIFT 右"Shift"键
= KEYBOARD_STATE_LSHIFT 左"Shift"键
= KEYBOARD_STATE_CTRL "Ctrl"键
= KEYBOARD_STATE_ALT "Alt"键
= KEYBOARD_STATE_SCROLLLOCK "ScrollLock键"
= KEYBOARD_STATE_NUMLOCK "NumLock键"
= KEYBOARD_STATE_CAPSLOCK "CapsLock键"
= KEYBOARD_STATE_INSERT "Insert键"

//出口参数:无
//返 回 值:与按键匹配时返回TRUE,否则返回FALSE
BOOL far AfxKeyboardState(int nState)
{
BYTE far *pHead = (BYTE far *)0x00400017L;


return (((*pHead) & (1 << nState)) ? TRUE : FALSE);
}



//举例
int main()
{
//只要按下"Shift",则退出
while (!AfxKeyboardState (KEYBOARD_STATE_LSHIFT) &&
!AfxKeyboardState (KEYBOARD_STATE_RSHIFT))
{
}
return (0);
}

[ Last edited by firstsail on 2007-3-4 at 12:41 AM ]
3 发表于 2007-03-04 15:31 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
可惜你这个不能在 TC/BC里用的...
论坛跳转: