Board logo

标题: 为什么 bioskey()对SHIFT等几个功能键无效? [打印本页]

作者: GOTOmsdos     时间: 2007-3-3 11:05    标题: 为什么 bioskey()对SHIFT等几个功能键无效?

代码如下:
(对其他键都有效,但按下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 ]
作者: firstsail     时间: 2007-3-4 00:38
//不能用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 ]
作者: GOTOmsdos     时间: 2007-3-4 15:31
可惜你这个不能在 TC/BC里用的...




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5