问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言如何调用方向键

发布网友 发布时间:2022-04-23 19:46

我来回答

4个回答

热心网友 时间:2023-10-05 11:45

在C代码中可设置如下自编的intokey(  )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch(  )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。方向键按下后会产生2个值,第一个是224,另一个分别为上下左右的72、80、75、77,因此要读取2次值来判断。要包含#include<conio.h> .

void  intokey(  )

  { int  flag;

    if ( kbhit(  ))    //判断有键按下时才执行下面的操作

     { flag = getch(  );    //用flag来获取键值

       if (flag==224)

         { flag = getch(  );  //值为224时表示按下了方向键,要再次获取才行

        if (flag==72 && dir != 2)  dir = 1; //方向键为“上”且原方向不为下时,让dir=1.

       if (flag==80 && dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.

        if (flag==75 && dir != 4)  dir = 3; //方向键为“左”且原方向不为右时,让dir=3.

        if (flag==77 && dir != 3)  dir = 4; //方向键为“右”且原方向不为左时,让dir=4.

        }

      if (flag==13)

         {  while( 1 )  if ( ( flag=getch( ) )==13 )  break ;  }

    }

}

注:这个函数来源于某些“贪吃蛇”的代码,略有修改,足可获取方向键值。其中的1、2、 3、4分别对应着上下左右。当flag获得键值后,分两种情况:一是flag=224,此时再次获取键值以判断输入的是4个方向中的哪一个;二是flag=13,表示按下回车键,我们就执行循环,程序暂停,等待再次输入回车,程序继续运行。

热心网友 时间:2023-10-05 11:45

1、调win32api函数SendMessage实现模拟按键
#include <windows.h>
SendMessage(hWnd,WM_KEYDOWN,键值,0);
其中hWnd是目标窗口的句柄
值是被宏定义过的,VK_ENTER回车,VK_ESC是ESC,VK_A是A键等
目标窗口句柄可以通过HWND hwnd=FindWindow("窗口名");获得

2、SendMessage
Windows API宏,在WinUser.h中根据是否已定义Unicode被定义为SendMessageW或SendMessageA,这两个函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。
该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。

热心网友 时间:2023-10-05 11:46

在贪吃蛇中定义了intokey( )函数[你也可以改成别的],整个函数体中的代码就是获取键盘
的方向键值,倒数第2-5行是获取回车键值,用于起暂停作用。这里用direction表示方向,
程序中UP、DOWN、LEFT、RIGHT分别固定代表1、2、3、4这四个值。第三行判断获得
了向上的键值,第四行在direction不等于DOWN值(就是2)时执行else {direction = UP; }
第(5、6);(7、8);(9、10)等行的意思,与这第(3、4)行类似,只是取值不同。
要包含文件 #include<conio.h> 。
void intokey()
{
if (GetAsyncKeyState(VK_UP) && 0x8000)
{ if (direction == DOWN) { } else {direction = UP; } }
if (GetAsyncKeyState(VK_DOWN) && 0x8000)
{ if (direction == UP) { } else {direction = DOWN; } }
if (GetAsyncKeyState(VK_RIGHT) && 0x8000)
{ if (direction == LEFT) { } else {direction = RIGHT; } }
if (GetAsyncKeyState(VK_LEFT) && 0x8000)
{ if (direction == RIGHT) { } else {direction = LEFT; } }
if (GetAsyncKeyState(VK_RETURN) && 0x0D)
{ while (1)
{ if (GetAsyncKeyState(VK_RETURN) && 0x0D) { break; } }
}
}

热心网友 时间:2023-10-05 11:46

方向键,按1个键,有2个信号。数值与操作系统键盘设置有关。判断方向键需要2个键值。我的win-7 键值如下:
int key1,key2; key1 = getch(); key2 =getch();
上移 224,72 (0xe0,0x48)
左移 224,75 (0xe0,0x4b)
右移 224,77 (0xe0,0x4d)
下移 224,80 (0xe0,0x50)
ESC 是单信号,27 (0x1b)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胜达这款车百公里油耗多少? 胜达节能油加盟办厂可靠吗是不是骗子 河南洛阳胜达就是骗子,我把钱交了也不来人了,他们一个老总说了爱咋办... 胜达油是个骗局吗 胜达节能油是什么? 叩解度关于叩解的论述 湿重跟湿重有关的打浆磨片 戴尔XPS M1330-950重要参数 如果到别的单位去面试的话 如果人家问起为什么会选择这家公司而离开另外... 学生会被两个部门同时面试怎么办 c语言中怎么实现键盘映射? 如何使用CSharp临时开启和关闭Win7的虚拟键盘? C#如何模拟键盘按下按键? 请问怎样实现c语言的模拟按键? 电脑怎么设置一个虚拟按键在屏幕上,我的电脑键盘一个按键f8坏了,请问怎么调一个f8的虚拟按键出来呢 笔记本怎么用虚拟键盘?键盘坏了 嘛,问个问题.B站上那些音乐视频是用什么软件做的 b站视频有哪些软件可以下载? b站的大部分up主做视频用的软件是什么? 爱剪辑制作歌词字幕的方法 爱剪辑怎么制作 定频空调到温度了自动关机,温度高了自动开机,这样会不会比一直开着 三菱电机1匹定频空调工作三分钟后就自动关机是什么故&#39; 定频空调会自动关闭吗 买了个定频空调机,可我发现室外机一会停止,一会运转,属于正常现象?_百度... 美的空调开着会自动关机是什么意思? 格力3匹定频空调开机十分钟外机自动关机内机不停什么原因? 为什么空调老是自动关机???挂式空调 就是空调开一会就自动关了, 空调自动关机怎么回事? 定频空调设定温度后怎么老是自动开关机了,是不是很费电了 空调自动关机是怎么回事 ThinkPad E550c怎么打开虚拟化技术 c语言,监听虚拟键的方法为什么不直接用getchar接收,然后用==判断是不是某个键,这样不就好 华硕Z97-C的主板怎么设置CPU虚拟化 c语言怎么监听键盘按键 电脑c按键 没有反应,怎么解决? 电脑C键打不出字,不要跟我说键盘坏了!我知道是设置问题。 笔记本电脑 调试C语言 的按键 电脑C键打不出字是怎么回事? word如何开头空两格? Word开头空两格怎么弄? 为什么在word中在段落开头空两格没法实现啊 word怎么开头空两格 word中图片下方文字第一行开头如何空两格 用WORD文档怎样让文章自动在前空两格? 在word文档中怎么设置每段的开头空两格? word正文样式如何设置段首空两格? 用word文档开头不能空两格是怎么回事? Word文件如何使文章每一段的开头自动空两格? word 内容对齐 怎么按照图中内容首行都空2格? word文档:单独占行前空2格,后接正文另起段落什么意思???