• 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,

  • 相关阅读:
    Hufman编码实现运用1 (原理不描述)
    E
    1178: [Apio2009]CONVENTION会议中心
    1071: [SCOI2007]组队
    #333. 【NOIP2017】宝藏
    CF 96 D. Volleyball
    CF 987 D. Fair
    qbxt的题:运
    qbxt的题:找一个三元环
    4361: isn
  • 原文地址:https://www.cnblogs.com/LceMeaning/p/2877875.html
Copyright © 2020-2023  润新知