我的程序,需要捕获按键 ctrl 的状态。(在我的程序有输入焦点和没有输入焦点的情况下都要正常捕获)
我用了两种方法
1.使用API函数 GetAsyncKeyState(VK_CONTROL)
2.安装系统级的键盘钩子可是这两种方法都存在问题:就是第一次能捕获到这个ctrl的状态可是下一次即使是他处于没有按下状态,但是两种方法的捕获结果都说是按下的(有记忆?)是不是要清除键盘缓冲区?请问这个问题怎么解决?得到答案,立刻给分!
我用了两种方法
1.使用API函数 GetAsyncKeyState(VK_CONTROL)
2.安装系统级的键盘钩子可是这两种方法都存在问题:就是第一次能捕获到这个ctrl的状态可是下一次即使是他处于没有按下状态,但是两种方法的捕获结果都说是按下的(有记忆?)是不是要清除键盘缓冲区?请问这个问题怎么解决?得到答案,立刻给分!
解决方案 »
- HttpOpenRequest函数PLPSTR怎么进行传参
- windows media player怎么创建一个播放列表,且能自动播放下一首
- 度过了痛苦的半个月,现在重新振作起来,散分200,开始新的生活工作学习(明早结贴)
- 请教高手TXMLDocument的问题
- 有个问题请教
- 很急的问题:Delphi中调用NetscapeNavigator!
- 如果delphi不能远程调用weblogic发布的EJB,那遇到此问题,作为delphi的程序员是不是只能跳楼呢
- 全部分求一个问题在于 几急不可待急乁
- 请问一个简单的条件是用Ttable的filter还是Tquery?
- 一个好简单的问题
- ListView1有没有一个筛选的功能。如只显示ListView1.columns[1]中内容为AAA的行
- 100分求idhttp怎样get网站的图片文件?
1. 返回0, 表示自上次调用GetAsyncKeyState函数之后, 没有按过某个键
2. 返回1, 表示自上次调用GetAsyncKeyState函数之后, 有按过某个键, 但是这个键目前没有被按下
3. 返回-32767, 表示这个键目前正被按下
下面是一个测试的代码:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 2000; //这里有意将定时器间隔定得比较长, 这样能看清楚不同情况下的函数返回值是不同的
Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := IntToStr(GetAsyncKeyState(VK_CONTROL));
end;end.