当前位置:首页 » 编程语言 » c语言判断按键按下
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断按键按下

发布时间: 2023-08-17 04:21:05

A. c语言如何检测点击的按钮

通常很多情况下,会有这样的事情,就是:

我们在运行某些程序的时候,发现按钮置灰了,比如购买版权或者输入序列号才能够获得访问权限。某个按钮才允许点击。

其实所有的这些东西都是 别的人或者公司利用一些编程语言调用windows的函数,实现的。所以如果我们也能调用windows的函数,那么我们就能够执行一些按钮或者某些东西背后的函数。

自己的mfc还暂时 用不了,不过 可以 试试这个。

调出这个界面,看到有一个置灰的设置按钮。我们可以试着调用这个后面的函数。

/*如何调出来?【在win7环境下】

打开控制面板

点击鼠标。*/

然后利用vs的工具中的spy++ x64。

进入查找窗口。

拖住这个到刚刚鼠标的那个置灰的按钮上面。就可以得到一个句柄。

句柄【在我理解,就是一个话把子,怎么解释,核隐敬就是,别人说一件事儿,你得顺着往下说才能把话接下来,然后完成你想说的东西。在程序里面,执行到这里,有这样一个句柄,允许我们说话了,我们就从这一点开始,顺着往携蔽下说,往往就能得到我们想要的结果】

所以得到了句柄之后。我们可以新建一个工程。

#include <windows.h>

int main(){

SendMessage(0x001607E6,WM_LBUTTONDOWN,0,0);
SendMessage(0x001607E6,WM_LBUTTONUP,0,0);

return 0;
}

//在HWND的第一个参数里面输入刚刚的句柄。

//猜测 第二个参数 是 WindowManager_LeftButtonDown,就是窗口管理改慎器左键按钮点下。

//然后左键按钮弹起。

就强制的往刚刚不能执行的函数里面发送了一个信息。前面的引文介绍说,这就是调用了windows底层的一些函数,如果按钮可以点击,则鼠标点击,按钮按下,当需要注册的时候,或者需要序列号的时候我们并没有,就不能点击。但是当我们给他发送一条消息以后,是不是问题就解决了。

B. c语言怎样判断键盘按键的按下、释放


C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:

bitkeychk()//单一按键检测

{

if(P1.0==0)//如果键按下

{

delay();//延时去抖

if(P1.0==0)return(1);//返回键状态


}

return(0);

}

unsignedcharkbscan(void)//矩阵扫描按键检测

{

unsignedcharsccode,recode;

P1=0x0f;//发0扫描,列线输入

if((P2&0x0f)!=0x0f)//有键按下

{

delay(20);//延时去抖动

if((P1&0x0f)!=0x0f)

{

sccode=0xef;//逐行扫描初值

while((sccode&0x01)!=0)

{

P1=sccode;

if((P1&0x0f)!=0x0f)

{

recode=(P1&0x0f)|0xf0;

while((P1&0x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return0;//无键按下,返回0

}

C. 求救c语言 如果要检测两个键同时被按下和松手检测的,要怎么样写呢

程序是顺序执行的,不存在严格的“同时”检测。所以,我们可以设置一个很“高”的检测频率。在同一个检测周期里发现按键都按下就可当做是同时按下。
然后你需要解决如何发现按键按下动作这个问题。
按键按下同样也不必一按下你就马上要发现这么紧张。同样在这么一个很“高”的检测频率下。发现前一次检测是个“没按下”状态现在变成了“按下”那就可以当做是这次检测周期里“按下”。
然后你需要解决如何记录前一次检测是什么东西的问题。
你需要额外用个寄存器暂时放你前一次检测的结果。并在检测周期结束之前记录当前的“日志”。
于是,你可以很从容地发现现在按键的状况以及上一次按键是个什么情况,你掌握了历史、当下、还要安排一下未来:检测到按键的动作后你要再写个服务程序来使用这个按键检测的结果。
最后,再说明一下,这个很“高”的频率大概10几ms也行的。越高频率检测越准确。同时。这个“同时”的检测也越严格。你可能会导致怎么按都很难触发‘同时’的动作。

D. C语言 如何在一段时间内检测键盘是否按下

#include <bios.h>
#include <stdio.h>
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有键按下,读取键值*/
key=bioskey(0);
else /*无键按下,返回0*/
key=0;
switch(key)
{case 0: ...../*无按键,执行该操作*/
case 0xXXXXH:..../*不同键值,做不同处理*/
。。。。。
}
}
}

该程序段功能:
判断是否有键按下,若有进行不同操作,若无进行其他操作。

相关原理:
函数名: bioskey
功 能: 直接使用BIOS服务的键盘接口
函数原型:int bioskey (int cmd)
说明:bioskey()的函数原型在bios.h中
bioskey()完成直接键盘操作,cmd的值决定执行什么操作。

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

键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。

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

其操作步骤为:
1.检测缓冲区是否有数据;
2.没有则继续第一步;
3.读取缓冲区第一个单元中的键盘输入
4.读取的扫描码
5.将已读取的键盘输入从缓冲区删除

E. c语言怎么判断是否点击了鼠标,简单一点的方法,dev c++可以用的,谢谢各位大神。

#include<cstdio>
#include<windows.h>
#define枣郑KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)行烂?1:0)

intmain()
{
while(1)
{
printf("鼠标左键是否按下:");
if(KEY_DOWN(VK_LBUTTON))printf("是");
elseprintf("否");
printf(" ");

printf("鼠标右键是否按下:");
if(KEY_DOWN(VK_RBUTTON))printf("是");
else档岩漏printf("否");
printf(" ");

Sleep(2000);
}
return0;
}

F. 求救c语言 如果要检测两个键同时被按下和松手检测的,要怎么样写呢

C语言 用getch() 可以即时获得按键的键值。
如果按下一个键,手不移动,根据你的键盘设置(按键时间长于多少则为新的按键),getch()会连续获得键值。
组合键将输出组合键的键值。
某些键,按一次会有2个键值,例如 F1,F2...F12, 上下左右箭头键。

Windows 和MFC c++ 程序 可以或的 各种复杂的按键“事件”,按着,抬起,按下抬起,你可以测时间间隔,时间延时,可以写很噜苏的程序。

#include<stdlib.h>
#include<stdio.h>
void main()
{
int i;
int key,key2;
// 普通键用 getch();取得
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
key = getch();
printf("\nkey value = 0x%02x -- %d\n",key,key);
// 箭头键
if (key == 0xe0) {
key = getch();
printf("\nkey value = %02x -- %d\n",key,key);
};
// F1键
if (key == 0) {
key2 = getch();
printf("\nkey value = %02x\n",key2);
switch (key2) {
case 0x003b: printf("F1 key");break;
case 0x003c: printf("F2 key");break;
case 0x003d: printf("F3 key");break;
case 0x003e: printf("F4 key");break;
case 0x003f: printf("F5 key");break;
case 0x0040: printf("F6 key");break;
case 0x0041: printf("F7 key");break;
default: break;
};
};

}