编程语言中文网今天精心准备的是《getasynckeystate》,下面是详解!

VB GetAsyncKeyState函数问题,高手进

用GetAsyncKeyState函数判断某个键被按下,第一次返回值为1,可是第二次、第三次·····该怎么判断,百科上查了本人菜鸟看的糊涂,求高手详细解释一下!...

用GetAsyncKeyState函数判断某个键被按下,第一次返回值为1,可是第二次、第三次·····该怎么判断,百科上查了本人菜鸟看的糊涂,求高手详细解释一下!

GetAsyncKeyState函数返回的是指定虚拟键瞬时的状态值,它有四种返回值:

0 --- 键当前未处于按下状态,而且自上次调用GetAsyncKeyState后改键也未被按过;

1 --- 键当前未处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键曾经被按过;

-32768(即16进制数&H8000) --- 键当前处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键未被按过;

-32767(即16进制数&H8001) --- 键当前处于按下状态,而且在此之前(自上次调用GetAsyncKeyState后)键也曾经被按过。

也就是说,你只要简单的判断GetAsyncKeyState的返回值是否为0,只要不为0就表示键被按下了。如果想精确点就判断一下返回值的二进制数位第0位或第15位是否为0。

C语言 图像 GetAsyncKeyState

GetAsyncKeyState这个函数怎么用为什么这个代码的程序按一下就输出一屏幕?while(1){if(GetAsyncKeyState(VK_LEFT)&0x8000)puts("左");if(GetAsyncKeyState(VK_RIGHT)&0x8000)puts("右...

GetAsyncKeyState这个函数怎么用

为什么这个代码的程序 按一下就输出一屏幕 ?

while(1)

{

if(GetAsyncKeyState(VK_LEFT)&0x8000) puts("左");

if(GetAsyncKeyState(VK_RIGHT)&0x8000) puts("右");

if(GetAsyncKeyState(VK_UP)&0x8000) puts("上");

if(GetAsyncKeyState(VK_DOWN)&0x8000) puts("下");

}

如果想在循环里按一下上下左右就输出一次应该怎么打

展开

把IF嵌套,设置变量,确定已按下哪些键

#include

#include

int main()

{

int ll;

while(1)

{

if(GetAsyncKeyState(VK_UP)&0x8000){

ll=1;}

if(ll==1) {

if(GetAsyncKeyState(VK_DOWN)&0x8000){

ll=2;}}

if(ll==2) {

if(GetAsyncKeyState(VK_LEFT)&0x8000) {

ll=3;}}

if(ll==3) {

if(GetAsyncKeyState(VK_RIGHT)&0x8000){

puts("上");puts("下");puts("左");puts("右");

ll=0;

}}

}

return 0;

}

扩展

说错了 应该是按其中一个方向键就显示一次,如果是其他字符要怎么弄?

补充

每输出一次就跳出循环,再进入循环,还要休眠

#include

#include

int main()

{

h:

Sleep (200);

while(1)

{

if(GetAsyncKeyState(VK_LEFT)&0x8000) {puts("左");goto h;}

if(GetAsyncKeyState(VK_RIGHT)&0x8000) {puts("右");goto h;}

if(GetAsyncKeyState(VK_UP)&0x8000){ puts("上");goto h;}

if(GetAsyncKeyState(VK_DOWN)&0x8000) {puts("下");goto h;}

}

return 0;

}

GetAsyncKeyState的问题,求看看怎么回事儿

你不要简单地检测GetAsyncKeyState的返回值是否非零,因为如果在这个函数运行前指定的键已经被按过,则这个函数的返回值的位0为1;如果这个键目前处于按下状态,则位15为1。换句话说,GetAsyncKeyState这个函数可以返回键盘上某个键的两种实时状态:“曾经被按过”以及“正在被按下”!而这两种状态都会使GetAsyncKeyState的返回值非零,因此用If GetAsyncKeyState(vbKeyA) Then来判断A键是否被按下是不严密的,因为在你的程序启动之前,A键很可能已经被按过了,这种情况下你的程序一启动,GetAsyncKeyState(vbKeyA)就是为“真”的!

因此你要检测返回值的位15是否为1才能够精确判断这个键是不是正在被按着:

If (GetAsyncKeyState(vbKeyA) And &H8000) = &H8000 Then

另外,还有一个API函数GetKeyState是只检测按键的当前状态的(也就是说它不检测这个键是否“曾经被按过”),但仍然要检测位15是否为1(位0为1表示开关键打开,即CapsLock、NumLock、ScrollLock键):

If (GetKeyState(vbKeyA) And &H8000) = &H8000 Then

使用GetAsyncKeyState来设置组合键,就是热键的设置

GetAsyncKeyState的基本代码就是下面的……PrivateDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsInteger'声明FunctionGetKey()AsStringDimAddKeyAsStringKeyResult...

GetAsyncKeyState的基本代码就是下面的……

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer '声明

Function GetKey() As String

Dim AddKey As String

KeyResult = GetAsyncKeyState(32) '回车键

If KeyResult = -32767 Then

要做的事情……

End If

这里是设为回车键,单个键偶会设~

那设“Ctrl+1”等的组合键该怎么设值呢?

有什么规律或者查表能找到值的呢?

可不可以就用这个程序中实现,不用到注册热键~

展开

【VB声明】

Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer

【说明】

判断函数调用时指定虚拟键的状态

【返回值】

Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处于按下状态,则位15设为1;如抬起,则为0。微软的win32手册指出:倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的

【备注】

如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT

和 VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和

Alt)

【参数表】

vKey ---- Long,欲测试的虚拟键的键码

用循环,判断出每个键的状态

VB中GetAsyncKeyState函数,得到键盘按键,清除键...

使用GetAsyncKeyState这个函数时,它得到是键盘上一次按键的键,哪怕上一次按键是在程序运行前。怎么解决让键盘记录清空呢?例:我在Timer事件里用GetAsyncKeyState来判断键盘是不是按...

使用GetAsyncKeyState这个函数时,它得到是键盘上一次按键的键,哪怕上一次按键是在程序运行前。怎么解决让键盘记录清空呢?

例:我在Timer事件里用GetAsyncKeyState来判断键盘是不是按下空格

private sub timer1_timer

if GetAsyncKeyState(VK_SPACE) then Call 事件A

end sub

但在我运行程序这前,最后一次按下的是空格,在运行程序后,我没有按任何键,却调用了事件A。求清除键盘记录!

另:有没有更好的函数,可以判断键盘类似于Form_KeyUp事件能判断键盘松开事件?

展开

你不要简单地检测GetAsyncKeyState的返回值是否非零,因为如果在这个函数运行前指定的键已经被按过,则这个函数的返回值的位0为1;如果这个键目前处于按下状态,则位15为1。所以你检测位15是否为1就可以知道这个键是曾经被按过还是正在被按着:

If (GetAsyncKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A

还有一个API函数GetKeyState是只检测按键的当前状态的,但仍然要检测位15是否为1(位0为1表示开关键打开,即CapsLock、NumLock、ScrollLock键):

If (GetKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A

更多扩展补充

扩展

我再问一下,为什么Form_KeyUp事件不执行呢?、

比如 我的代码是

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

msgbox '"ffdkfjadf"

If GetAsyncKeyState(VK_SPACE) Then

Command5_Click

End If

End Sub

运行时,无论我按什么键,他都不执行!为何?

补充

这是因为键盘事件(包括KeyDown、KeyUp、KeyPress)被窗体上的其他具有焦点的控件抢走了,所以窗体本身就无法响应键盘事件了。解决的办法是把窗体的KeyPreview属性设为True:

Private Sub Form_Load()

Me.KeyPreview = True

End Sub

这样窗体就会优先响应键盘事件(其他控件也可以响应,但排在窗体后面)

扩展

君乃神人也!谢谢啦!

c语言 GetAsyncKeyState好像只能同时按下两个键有...

我想做一个控制台游戏,需要同时响应4个键被按下...

我想做一个控制台游戏,需要同时响应4个键被按下

按键的同时检测如果实在游戏里面windows.h,stdio.hif(GetAsyncKeyState('A')&0x8000)//'A'c|=4;if(GetAsyncKeyState('D')&0x8000)//'D'c|=8;if(c&4&&c&8){printf("hello");c=0;}用了GetAsyncKeyStateapi的函数,这个函数的使用方法很有特点用了get监测按键按下,然后c分别和4,8来或运算,然后if再用与运算监测,确实按下了那两个按键之后执行什么,当然在加&&,可以监测多个按键

这一段是什么意思?

#defineKEYDOWN(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?1:0)#defineKEYUP(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?0:1)...

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)

#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

GetAsyncKeyState()函数的使用

我在控制台程序中试用了一下这个函数,起初觉得挺好用,但是在简化过程中出现了严重的问题,在循环中GetAsyncKeyState()会持续不断地返回数值导致我按一次键出现频繁的结果想求教一下...

我在控制台程序中试用了一下这个函数,起初觉得挺好用,但是在简化过程中出现了严重的问题,

在循环中GetAsyncKeyState()会持续不断地返回数值 导致我按一次键出现频繁的结果 想求教一下怎么解决这个问题

展开

你是写在一个循环中的,当你按下一个键还没有弹起的时候,每执行一次循环体(也就是执行一次这个函数),这个函数就会返回一个值,一个代表你按的这个键按下状态的值

C++中GetAsyncKeyState 能不能判断按任意键呢 就是...

如果我只仅仅想判断键盘按键是否按下不管他按的是哪个键有什么方法么...

如果我只仅仅想判断键盘按键是否按下 不管他按的是哪个键有什么方法么

//  重写父类的PreTranslateMessage这个虚函数

BOOL CXXX::PreTranslateMessage(MSG* pMsg)

{

//键盘按下

if (pMsg->message==WM_KEYDOWN)

{

//处理函数

}

return CDialog::PreTranslateMessage(pMsg);

}

SHORT GetAsyncKeyState(int vKey);

参数vKey是某个按键的虚拟码。

功能 :

如果函数成功,则返回值指定此按键自上次上次调用GetAsyncKeyState后是否按下过,以及此按键当前是弹起的还是按下的。如果最高比特位被设置(就是被设为1),此按键就是按下的,如果最低位被设置,则此按键在上次调用GetAsyncKeyState之后(“又”)被按下过。但是你不应该依赖于之前的(按键)行为。

所以GetAsyncKeyState只能判断具体某一个键是否被按下。

更多扩展补充

扩展

是啊 而且我还需要是全局获取按键信息 只能使用钩子,或者ddk.您有这方面的小例子么

补充

你如果只是判断键盘是否按下的话,我上面贴的代码就可以了。

至于如果使用钩子的话,太麻烦了,而且如果不是对钩子很熟悉的话,写起来很困难的。

扩展

今天找到一个钩子例子 迷迷糊糊 就改成功了 不过还是很谢谢你

补充

不客气

GetAsyncKeyState()函数的意思

#defineKEY_DOWN(vk_code)(GetAsyncKeyState(vk_code)&0X8000)?1:0哪位大牛帮看看这个函数是嘛意思!谢谢啊;在后面程序中有调用:if(KEY_DOWN(VK_SHIFT))speed=speed*4;...

#define KEY_DOWN(vk_code)(GetAsyncKeyState(vk_code)&0X8000)?1:0

哪位大牛帮看看这个函数是嘛意思! 谢谢啊;

在后面程序中有调用:

if (KEY_DOWN(VK_SHIFT))

speed=speed*4;

c语言getasynckeystate,getasynckeystate相关推荐

  1. c语言getasynckeystate,GetAsyncKeyState用法

    GetAsyncKeyState 就是调用GetAsyncKeyState函数得到某个键的状态,然后判断返回值的最高位是不是1,如果是表示这个处于按下状态 1.&与操作,&0x8000 ...

  2. c 语言 vk_return,GetAsyncKeyState(VK_RETURN)遇到

    GetAsyncKeyState(VK_RETURN) 在我输入我的信息后,它不回到我的菜单.它突然问我输入另一个信息(这是无止境的). 我不确定它是否使用GetAsyncKeyState(VK_RE ...

  3. GetAsyncKeyState

    首先介绍一下几个概念: 按位与运算符"&":是双目运算符,其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补 ...

  4. GetAsyncKeyState() 0x8000

    0x8000 & GetKeyState(VK_SHIFT); 这句是判断是否有按下shift键. 关于GetAsyncKeyState与GetKeyState区别: 关于GetAsyncKe ...

  5. GetKeyState和GetAsyncKeyState的区别

    刚接触这个两个函数的时候,我也特别困惑,不知道二者有什么差别,看了msdn之后,也不是很清楚.遍寻web,才略有了解,分享给大家. 简单的说. GetAsyncKeyState就是检查在调用该函数时, ...

  6. GetAsyncKeyState()用法

    1)if(GetAsyncKeyState(VK_LSHIFT)) 这样写是不对的. GetAsyncKeyState的返回值表示两个内容,一个是最高位bit的值,代表这个键是否被按下,一个是最低位b ...

  7. GetAsyncKeyState用法

    GetAsyncKeyState 就是调用GetAsyncKeyState函数得到某个键的状态,然后判断返回值的最高位是不是1,如果是表示这个处于按下状态 1.&与操作,&0x8000 ...

  8. GetKeyState、GetAsyncKeyState、GetKeyboardState函数的区别:

    GetKeyState.GetAsyncKeyState.GetKeyboardState函数的区别: 1.BOOL GetKeyboardState( PBYTE lpKeyState );获得所有 ...

  9. GetKeyState()和GetAsyncKeyState()的区别

    使用::GetKeyState()返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用<0或>0来判断. ...

最新文章

  1. 使用python抓取百度漂流瓶妹纸照片
  2. UseControls ————用户自定义控件的textbox的传值问题
  3. LeetCode Search in Rotated Sorted Array II
  4. [gic]-linux和optee的中断处理流程举例(gicv3举例)
  5. nvidia-smi:Failed to initialize NVML: Driver/library version mismatch
  6. 娄底二中高考2021成绩查询,2021年娄底高考状元名单公布,娄底高考状元学校资料及最高分...
  7. 【洛谷 - P1772 】[ZJOI2006]物流运输(dp)
  8. LeetCode 255. 验证前序遍历序列二叉搜索树(单调栈)*
  9. appinventor离线版下载_Chrome 离线安装包下载
  10. 一个表的信息插入到另一个表里面,如果遇到重复的就覆盖
  11. Java8 Stream流式编程,极大解放你的生产力!
  12. #C++初学记录(素数判断)
  13. 在jQuery代码中,实现转跳
  14. 51nod1079中国剩余定理
  15. 用perl操作word
  16. Mac SecureCRT 下载、安装详细步骤
  17. 【学习笔记】Unreal(虚幻)4引擎入门(三)
  18. FAT32文件系统介绍
  19. centos安装7zip
  20. 进程proc文件介绍

热门文章

  1. CentOS重装mysql
  2. win7无损分区和调整合并
  3. 《京韵大鼓——红梅阁》(唱词文本)(骆玉笙演出本)
  4. 电子相册视频制作工具:photo2movie for Mac
  5. Easyswoole 令牌桶IP限流实现(企业实用)
  6. 网络管理实验2——MRTG软件的运行和应用
  7. csdn博客页面内任意自动跳转(附编写截图),自动目录,超链接跳转,MarkDown编辑器(默认编辑器)
  8. 在翻译PEP8中学习 -- Style Guide for Python Code
  9. Oracle创建外键约束
  10. Android Webview遇到的问题——记新版广告墙开发