如何注册全局快捷键

4 views
Skip to first unread message

magi...@tom.com

unread,
Aug 25, 2006, 9:50:07 AM8/25/06
to ki...@googlegroups.com

注册全局快捷键需要一个全局原子,同时要准备好快捷键的定义。

function TMainForm.RegHotKey():Boolean;
const
DEFAULT_HOTKEY_MOD=MOD_CONTROL or MOD_ALT;
DEFAULT_HOTKEY_VK=$44;
begin
  hotkeyid:=GlobalAddAtom(pchar('UserDefineHotKey'))-$C000;
  result:=RegisterHotKey(Form.Handle,hotkeyid,DEFAULT_HOTKEY_MOD,DEFAULT_HOTKEY_VK);
end;
DEFAULT_HOTKEY_MOD是辅助键按下的状态,可以是ctrl,alt,shift。

DEFAULT_HOTKEY_VK是按键值,$44是字母D的按键值。

返回是否成功。

以上这个函数注册了一个ctrl+alt+D的全局快捷键,在windows任何地方都可以响应到。

这个是取消注册的函数。

function TMainForm.UnRegHotKey():Boolean;
begin
  result:=UnregisterHotKey(Form.Handle,hotkeyid);
  DeleteAtom(hotkeyid);
end;

两句话,一个取消注册,另一个删除原来申请的原子。

那么按下快捷键后,会发生什么呢?

注册的时候有一个handle,windows将向这个handle发一个消息,WM_HOTKEY,这时候程序处理一下这个消息就可以了,例:

  case msg.message of
    WM_HOTKEY:
    begin
      //快捷键,隐藏或显示
      if(Applet.Visible)then
      begin
        AppletHide;
      end
      else
      begin
        AppletRestore;
        Applet.BringToFront;
      end;
      Result:=true;
    end;
end;

这个代码是KOL库的代码,VCL的也是类似。

---
本文章使用开源内容管理kicoy发布

Reply all
Reply to author
Forward
0 new messages