zoukankan      html  css  js  c++  java
  • RegisterHotKey注册快捷键

    RegisterHotKey的具体使用方使用方法如下: 


    BOOL   RegisterHotKey( 
    HWND   hWnd,         //响应该热键的窗口句柄 
    Int   id,                       //该热键的唯一标识 
    UINT   fsModifiers,   //该热键的辅助按键 
    UINT   vk                 //该热键的键值 
    );   

    为了得到唯一标识,我们还将用到另一个API函数   
    ATOM   GlobalAddAtom( 
    LPCTSTR   lpString   //自己设定的一个字符串 
    ); 

    例如:

    注册热键

    m_HKId = ::GlobalAddAtom(_T("MyHotKey")) - 0xC000;
    BOOL bl = ::RegisterHotKey(GetHWND(), m_HKId, MOD_SHIFT, VK_F1);



    因为我们还要在程序退出的时候,消除这个热键,   所以需要声明一个全局变量:   
    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。当然如果你希望象TAKEIT那样,只用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;   

    然后在程序中加入如下代码:   

    消息处理函数中判断消息是否为 WM_HOTKEY消息

    case WM_HOTKEY:

    {

    //热键要处理的操纵
    }

    break;


    最后一步:   
    在窗口的close事件中加入   

    UnRegisterHotKey(handle,   HotKeyId);   //注销HotKey,   释放资源

  • 相关阅读:
    字符串匹配算法 【微软面试100题 第三十三题】
    交换元素,使两数组之和的差最小 【微软面试100题 第三十二题】
    在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
    栈的push、pop序列 【微软面试100题 第二十九题】
    整数的二进制表示中1的个数 【微软面试100题 第二十八题】
    跳台阶问题 【微软面试100题 第二十七题】
    左旋转字符串 【微软面试100题 第二十六题】
    字符串中找出最长的数字串 【微软面试100题 第二十五题】
    合并链表 【微软面试100题 第二十四题】
    计算圆形是否和正方形相交 【微软面试100题 第二十三题】
  • 原文地址:https://www.cnblogs.com/lisuyun/p/3696902.html
Copyright © 2011-2022 走看看