delphi - 如何检测按键被按下的时间?

标签 delphi winapi keyboard delphi-7

我正在寻找一种方法来检测 Delphi 项目中按键按下的时间并警告用户。

我正在开发一个聊天程序,需要查看该人是否按住某个字母(例如 W 键)来向该聊天框发送垃圾邮件。我将给出在 Delphi 7 中尝试执行的示例:

//Looking up if key in use and held for lets say 20 seconds
if (GetAsyncKeyState(Byte(VkKeyScan('W'))) shl 20) <> 0 then
begin
  ShowMessage('W Key Held down too long!');
end;

不过,我不确定 GetAsyncKeyState 是否会向我提供该信息。如果没有,什么会?

最佳答案

Windows 不会报告按住某个键的持续时间,仅报告按住的键会重复相同的 WM_KEY... 消息。您必须自己手动跟踪持续时间。当您检测到 wParam 位 30 设置为 1 的 WM_KEYDOWN 消息时,如果您尚未跟踪该键,请开始跟踪它并用它存储当前系统/刻度,否则获取当前系统/滴答时间,计算持续时间,并采取相应措施。当您收到 WM_KEYUP 消息时,如果您正在跟踪该按键,请停止跟踪该按键。

关于delphi - 如何检测按键被按下的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973296/

相关文章:

delphi - Fxxx私有(private)类名前缀约定从何而来?

c++ - C2440 无法在 C++ WinApi 中将 LRESULT 转换为 WNDPROC

android - 在 Android 上关闭键盘后返回沉浸模式

ios - 键盘扩展的内存限制

sharepoint - TWebBrowser和NTLM身份验证

delphi - 有人有将 D2007 + TntControls 应用程序移植到 D2009 的经验吗?

delphi - Delphi 的通用 "document/image viewer"?

c++ - 使用 copyFile 函数时为 "Access denied",但是,"moveFile"在相同目录上工作正常

c# - C# 中用于获取 CPU ID 和驱动器/卷序列号的 API

java - 使用软键盘(数字密码键盘)上的 "OK"键而不是单击按钮?