有不少人讨论过显示系统键(capslock.numlock.insert.scrolllock等)状态的问题,用得最多的方法是添加一个timer,在事件中刷新系统键状态显示;另一个方法是做一个系统hook,在hook中刷新显示.这两种方式都会严重占用系统资源,第一种方法还存在延迟的问题.现在介绍第三种方法:
下面给出实现代码: 【程序编程相关:在DELPHI中利用ADO组件访问数据库】
键盘按钮被按下时系统会发送wm_keydown.wm_char.wm_keyup消息给当前的激活应用程序,消息的wparam是键盘扫描码,这样我们就可以知道按键是否被按下或释放,在这里面刷新按键状态显示是最佳的时候.不过这里还有一个问题,应用程序在非激活状态时是收不到以上消息的,因此需要在程序被激活时检测并刷新状态显示. 【推荐阅读:IndySSL-usingcertifi】
interface 【扩展信息:ShadowStarCodeFast下载】
unit unit1;
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, comctrls;type
tform1 = class(tform) statusbar1: tstatusbar; procedure formcreate(sender: tobject); private procedure appactivate(sender: tobject); procedure apponmsg(var msg: tagmsg; var handled: boolean); procedure showkeystate; //显示系统按键状态end;
var
form1: tform1;implementation
{$r *.dfm}
procedure tform1.formcreate(sender: tobject);
begin //显示系统键状态,指定事件代理 showkeystate; application.onmessage := apponmsg; application.onactivate := appactivate; end;procedure tform1.appactivate(sender: tobject);
begin ... 下一页