RegisterHotKey设置系统级热键《转》

BOOL   RegisterHotKey(   
  HWND   hWnd,         //响应该热键的窗口句柄   
  Int    id,           //该热键的唯一标识   
  UINT   fsModifiers,  //该热键的辅助按键   
  UINT   vk            //该热键的键值   
  );     
    
  为了得到唯一标识,我们还将用到另一个API函数     
  ATOM   GlobalAddAtom(   
  LPCTSTR   lpString   //自己设定的一个字符串   
  );   
    
  因为我们还要在程序退出的时候,消除这个热键,   所以需要声明一个全局变量:     
  HotKeyId:   Integer;     
    
  第一步:     
  在窗口的create事件中,加入以下代码     
  HotKeyId   :=   GlobalAddAtom(‘MyHotKey’)   -   $C000;   
  注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,
      GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用
要求。   
    
  第二步:     
  在上面的代码下面加入:     
  RegisterHotKey(Handle,   hotkeyid,   MOD_ALT,   VK_F8);       
  热键的辅助按键包括Mod_Ctrl   、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows键,即其键面上有Windows标志的那个键,其值

为Mod_win。   
  上面的代码注册了一个热键:ALT+F8。当然如果你希望只用F8,   就这么写:   
  RegisterHotKey(Handle,   hotkeyid,   0,   VK_F8);       
  注:handle是一个特殊的变量,它表示当前窗口的句柄。   
  这个函数你应该能句举一反三了吧。   
    
  原理:   
  一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应   
  用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消   
  息的格式为:       
  idHotKey  =  (int)  wParam;                //   该参数在设置系统级的热键有用,一般不予使用   
  fuModifiers  =  (UINT)  LOWORD(lParam);    //热键的辅助按键   
  uVirtKey  =  (UINT)  HIWORD(lParam);       //热键的键值     
    
  第三步:     
  注册了热键,就该写下响应代码了。     
  首先,在程序头部分的private段中加入声明:     
  procedure   HotKeyDown(var   Msg:   Tmessage);   message   WM_HOTKEY;     
  然后在程序中加入如下代码:     
  procedure  Tfmain.HotKeyDown(var  Msg:  Tmessage);     
  begin     
    if  (Msg.LparamLo  =  MOD_ALT)  AND  Msg.LParamHi  =  VK_F8  then  //假设热键为ALT+F8     
      begin
        ...//热键处理程序
      end    
  end;     
    
  最后一步:     
  在窗口的close事件中加入     
  UnRegisterHotKey(handle,   HotKeyId);   //注销HotKey,

原文地址:https://www.cnblogs.com/LceMeaning/p/2877875.html