zoukankan      html  css  js  c++  java
  • MFC 注册热键

    具体实现步骤如下:
    1.声明热键消息处理函数原型
    在XXXDlg.h中消息映射声明处(afx_msg字样之后)加入如下语句:

        afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

    2.消息与相应处理函数相关联
    在XXXDlg.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,

        ON_MESSAGE(WM_HOTKEY,OnHotKey)

    3.为方便以后的操作
    添加Dlg的事件

    WM_CREATE

    WM_DESTROY

    系统自动创建响应 WM_CREATE 和 WM_DESTROY 消息的函数
    OnCreate(   )与OnDestroy(   )的框架

    4.向系统登记热键
    在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为Ctrl+Shift+A.

        RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');
        RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');

    5.处理热键
    在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码等:

    LRESULT CExampleView::OnHotKey(WPARAM wParam,LPARAM lParam)

    {
        if (wParam== 1001||wParam == 1002)

        {

            CWnd::SetForegroundWindow();//使得被激活窗口出现在前景

            MessageBox("Hello,How   do   you   do!");//验证

        }

        return 0;

    }

    6.程序运行完毕后解除热键
    在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.

        UnregisterHotKey(m_hWnd, 1001);
        UnregisterHotKey(m_hWnd, 1002);

    7.编译并运行程序
    运行程序后,无论何时只要按下热键Ctrl+Shift+A后本程序便立即成为前台运行程序,并出现在DeskTop上。

    注册热键
    下面是两个关键的函数: 
    BOOL   RegisterHotKey(
       HWND hWnd,
       int id,
       UINT fsModifiers,
       UINT vk
       );
    //用于在系统中注册热键

    hWnd用于指定注册热键的窗口,如果为NULL的话将使热键被注册到该函数的调用线程;

    id用于指定该热键的标识,在热键消息相应的时候,我们将通过该ID来对不同的热键消息作区分;

    fsModifiers用于指定修改键(如:control、alt、shift甚至窗口键都可以),它有下列值可选:
    值    描述
    MOD_ALT   任一Alt键按下
    MOD_CONTROL  任一Control键按下
    MOD_KEYUP  任意键按下
    MOD_SHIFT  任一Shift键按下
    MOD_WIN  任一窗口键按下

    vk的值对应用户按下的键值,
    VK_0-VK_9是数字键   0-9,
    VK_A-VK_Z是字母   a-z,
    其他更多的键值请查阅MSDN。
    注意:This function cannot associate a hot key with a window created by another thread.(MSDN里的原话) 


    BOOL UnregisterHotKey(HWND  hWnd, int id);
    //用于在系统中注消热键 
    该函数的参数和RegisiterHotKey的那两个参数意义大体相同。

    或者可以使用Hook,利用函数SetWindowsHook挂接一个键盘Hook,具体例子请看VC带的例子Spy。

  • 相关阅读:
    图片懒加载原生写法。
    ES6新声明
    下拉刷新上拉加载
    angular动画
    angular路由切换后 轮播以及iscrollJs失效的问题
    ui-route多级嵌套时的默认显示。
    iscroll.js的基本布局
    angular ng-route和ui-route
    require.js JQ
    Cookie&Session
  • 原文地址:https://www.cnblogs.com/lizs/p/3624201.html
Copyright © 2011-2022 走看看