为什么程序接收不到功能键键盘的消息??

XiaoMi90 2010-11-23 05:01:38
主函数的程序段如下:
char c;
c=getch();
if(c==VK_F1)
{
sys.user();
}
程序执行的时候按下F1程序直接跳出了,接收不到F1的键盘消息?这是为什么呢??
...全文
169 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
just_run_run_run 2010-11-24
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>

bool KeyDown(int key)
{
return (GetAsyncKeyState(key) & 0x8000) != 0;
}

int main()
{

while(1)
{
if(KeyDown(VK_ESCAPE))
{
break;
}
else if(KeyDown(VK_F1))
{
printf("F1 pressed down!\n");
}

Sleep(100);
}

return 0;
}
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
啊们……快来人帮帮偶吧、在线等啊、
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
谢谢你的回答、我不知道是不是没有理解你的回答还是什么,我要按下F1、F2等等、去执行我特定的操作……不需要返回值
lizhengjun2010 2010-11-23
  • 打赏
  • 举报
回复
函数原型:int bioskey (int cmd)

说明:bioskey()的函数原型在bios.h中

bioskey()完成直接键盘操作,cmd的值决定执行什么操作。

cmd = 0:

当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。

cmd = 1:

当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。

cmd = 2:

当cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert键的状态。各键状态存放在返回值的低8位字节中。


字节位 含义

0 右边Shift键状态

1 左边Shift键状态

3 Ctrl键状态

4 Alt键状态

5 ScrollLock键状态

6 NumLock键状态

7 CapsLock键状态

8 Insert键状态


字节位为1表示该键被按下,为0表示松开。
-------------------------------------------------------------------------
-------------------------------------------------------------------------
bioskey函数用于从内存中读取一个按键的scancode值.
格式是: int bioskey(int cmd)
参数cmd取值:
0: 读取scancode,并从内存中删除,如果没有按键则等待.
1: 读取scancode,但不从内存中删除(其它函数可以继续使用),如果无按键则返回0
2: 返加shift alt ctrl键的状态
按下shift返回1,按下ctrl返回4,按下alt返回8,
如果是 shift+ctrl 则返回5(相加),依此类推....

XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhao4zhong1 的回复:]
此为bc++3.1的getch example

C/C++ code
#include <conio.h>
#include <stdio.h>

int main(void)
{
int c;
int extended = 0;
c = getch();
if (!c)
extended = getch();
if (extended)
……
[/Quote]这个无法区分出F1,F2……
7楼那个兄弟说的那个是什么意思?能设计一个程序段让偶看看么?
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
谢谢了, 我试试……
赵4老师 2010-11-23
  • 打赏
  • 举报
回复
此为bc++3.1的getch example
#include <conio.h>
#include <stdio.h>

int main(void)
{
int c;
int extended = 0;
c = getch();
if (!c)
extended = getch();
if (extended)
printf("The character is extended\n");
else
printf("The character isn't extended\n");

return 0;
}
赵4老师 2010-11-23
  • 打赏
  • 举报
回复
getch先返回一个0,再调用一次就会返回F1的scan code了
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
啊?!那这段程序怎么设计呢?
luciferisnotsatan 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gules 的回复:]

F1不会产生一个字符,用getch()当然不行,要用windows消息机制来进行键盘消息处理。
[/Quote]
+1
gules 2010-11-23
  • 打赏
  • 举报
回复
F1不会产生一个字符,用getch()当然不行,要用windows消息机制来进行键盘消息处理。
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
哥哥们,给偶指导指导啊,这课程设计偶还要学分呢,帮帮忙啊……
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
十六
虚拟键码 进制值 键意义

VK_F1 70 F1 key


我用的就是这个,试过了,不行
qq120848369 2010-11-23
  • 打赏
  • 举报
回复
F1的ASCii是什么,求解答.
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
还是不行……
XiaoMi90 2010-11-23
  • 打赏
  • 举报
回复
这个应该可以的吧,我换过用VK_TAB键的就可以?换成ASCII码不需要换什么吧?我试试
無_1024 2010-11-23
  • 打赏
  • 举报
回复
应该要换算成相应的ascll码值吧

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧