首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 软件频道 > 设计在线 > 网页UI设计 >全局热键

全局热键

2000-09-15 00:00作者:吴中卫出处:yesky责任编辑:

p style="margin-top: 0; margin-bottom: 0">  通常在自己的程序里定义热键,只能在自己的应用窗口范围内使用,未免使用起来受到一定的限制。

如果能在自己的应用程序里定义能被所有窗口访问的热键,应该是比较具有现实意义的。要定义一个全局热键,通常有三个步骤:

  1。定义 Windows 的消息 WM_HOTKEY 的 HOOK 链,即 procedure myshortcut(var message: TMessage);

message WM_HOTKEY;

  2。向 Windows 加入一个全局原子 hotkey : GlobalAddAtom(’hotkey’), 并保留其句柄

  3。向 Windows 登记热键链: RegisterHotKey( 应用句柄,全局原子句柄, mod_control ,88 );

其中,RegisterHotKey 函数原形如下

 

BOOL RegisterHotKey(
HWND hWnd, // 连接热键的窗口句柄

int id, // 全局原子句柄

UINT fsModifiers, // 热键修饰标志

UINT vk // 虚拟键盘码

);

 

  这里,fsModifiers 是指虚拟键盘码 vk 结合何种键一起生成 WM_HOTKEY 的消息,它是下列三值的组合:

MOD_ALT // ALT 键必须按下

MOD_CONTROL // CTRL 键必须按下

MOD_SHIFT // SHIFT 键必须按下

 

  有了这些准备,你就可以定义自己喜欢的方式了。下面是一个范例,当 CTRL + Q 在任何时候被按下时,都会打出 “你好,Crtl + Q 被按下” 的信息。

 

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);

protected
procedure myshortcut(var message: TMessage); message WM_HOTKEY;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
id:Integer;

implementation

{$R *.DFM}

procedure TForm1.myshortcut(var message: TMessage);
begin
ShowMessage(’你好,Crtl + Q 被按下’);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom(’hotkey’);
RegisterHotKey(handle,id,mod_control,88);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id); //别忘了在退出时取消定义
end;

关注此文的读者还看过:

返回软件频道首页

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

热门
推荐

网友关注

软件
资料
游戏

文章排行

本周
本月
最新更新
天极服务| 关于我们| About us| 网站律师| 电子杂志| RSS订阅| 友情合作| 加入我们| 网站地图| MSN/QQ上看天极
TMG
Copyright (C) 1999-2009 Yesky.com, All Rights Reserved
版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868 在线提交意见反馈
渝ICP证B2-20030003号  通用网址:天极网
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众
经营性网站备案信息 网警备案 中国网站排名