您的位置:首页 > 编程语言 > Delphi

全局热键在Delphi中的应用实例

2011-12-06 13:42 281 查看
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
id: array [1..10] of Integer;
idstring:array [1..10] of string;
procedure WMHotKey(var msg : Tmessage); message WM_HOTKEY;{响应全局热键按键消息的过程}
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:byte;
begin
for i:=1 to 10 do
begin
UnRegisterHotKey(handle,id[i]);// 释放你应用程序定义的热键
GlobalDeleteAtom(id[i]);// 从原子表删除你定义的热键的原子标识号
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i:byte;
begin
for i:=1 to 10 do
begin
idstring[i]:=inttostr(i);
id[i]:=GlobalAddAtom(pchar('MyHotkey'+idstring[i]))-$C000;
{因为GlobalAddAtom 函数返回的值在0xC000-0xFFFF范围之间,减去$C000是为了取值范围的唯一性 }
RegisterHotKey(handle,id[i],MOD_CONTROL ,111+i);
//112为F1 、113为F2…、121为F10
end;
end;

procedure TForm1.WMHotKey (var Msg : Tmessage);
begin
{Ctrl+F1键被按下}
if (msg.LParamHi=112 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;//该消息已经被处理
application.BringToFront ;
label1.Caption := 'Ctrl+F1';
end;
{Ctrl+F2键被按下}
if (msg.LParamHi=113 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F2';
end;
{Ctrl+F3键被按下}
if (msg.LParamHi=114 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F3';
end;
{Ctrl+F4键被按下}
if (msg.LParamHi=115 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F4';
end;
{Ctrl+F5键被按下}
if (msg.LParamHi=116 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F5';
end;
{Ctrl+F6键被按下}
if (msg.LParamHi=117 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F6';
end;
{Ctrl+F7键被按下}
if (msg.LParamHi=118 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F7';
end;
{Ctrl+F8键被按下}
if (msg.LParamHi=119 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F8';
end;
{Ctrl+F9键被按下}
if (msg.LParamHi=120 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F9';
end;
{Ctrl+F10键被按下}
if (msg.LParamHi=121 ) and (msg.lparamlo=MOD_CONTROL ) then
begin
msg.Result:=1;
application.BringToFront ;
label1.Caption := 'Ctrl+F10';
end;
end;

end.


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: