【发布时间】:2012-10-10 00:16:57
【问题描述】:
我正在寻找一种方法来检测在 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 是否会给我这些信息。如果没有,那会怎样?
【问题讨论】:
-
收听
WM_KEYDOWN和WM_KEYUP消息不是更方便吗? -
有一个键盘重复率/重复延迟(系统范围的参数),可能因每个用户而异。我认为你应该考虑到这一点。
-
如果有人通过从剪贴板粘贴长文本来破解您的保护怎么办?
-
评论是有效的,但我觉得这个问题很有趣..
-
@mj2008:MSDN 说重复计数不是累积的。但是,您实际上并不需要实际计数,只需要知道消息是否重复即可。您可以从消息的
wParam的第 30 位获取该信息。
标签: delphi winapi keyboard delphi-7