You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中GetAsyncKeyState(117)是什么?相关代码功能解析

TTimer中GetAsyncKeyState代码逻辑解析

先看你贴的这段Delphi代码:

procedure TMyMain.CaptureKeyTimerTimer(Sender: TObject);
var
  keyloop, KeyResult : Integer;
begin
  KeyResult := GetAsyncKeyState(117);
  if (KeyResult = -32767) then
    Button90Click(Sender);
end;

下面逐个解答你的疑问:

1. GetAsyncKeyState(117)是什么?

  • GetAsyncKeyState是Windows系统提供的API函数,作用是直接检测指定按键的当前状态,它不需要依赖程序的消息循环,能绕过常规键盘输入处理逻辑读取按键状态。
  • 这里传入117,就是在查询对应按键的实时状态。

2. 参数117代表什么?

  • 这个参数是虚拟键码(Virtual-Key Code),117对应的是键盘上的F6键(系统定义的VK_F6常量数值就是117)。

3. 返回值等于-32767意味着什么?

  • GetAsyncKeyState返回的是一个16位整数,它的二进制位有特殊含义:
    • 最高位(第15位)为1,表示该按键当前正处于按下状态;
    • 最低位(第0位)为1,表示该按键从上次调用这个函数到现在,被按下过至少一次。
  • -32767的二进制是1000000000000001,刚好同时满足最高位和最低位为1的条件,说明:F6键现在正被按住,并且是在本次Timer检测周期内首次被触发(或者说从上一次Timer执行到现在,按键刚被按下)。
  • 当这个条件成立时,代码会调用Button90Click方法,相当于用F6键来模拟点击Button90按钮的操作。

内容的提问来源于stack exchange,提问作者JakesF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:59:57