zoukankan      html  css  js  c++  java
  • 关于热键HotKey与WM_KEYDOWN的一点心得

            接到一个需求,如果焦点在程序内,则支持VK_NEXT翻页。

            第一想法,是处理WM_KEYDOWN消息,发现是VK_NEXT则做相应的逻辑,但是程序内的界面太多了,每个界面都需要处理这个逻辑,显得不合适。

            热键可以解决这个问题。热键能保证只要用户操作了注册的热键,就能收到窗口消息WM_HOTKEY。

            热键的副作用就是会强占WM_KEYDOWN。

            什么意思,就是原先会产生WM_KEYDOWN的VK_NEXT,如果被注册热键了,那么只能收到WM_HOTKEY,WM_KEYDOWN收不到了。

            一种解决方法是,造一个WM_KEYDOWN,以避免影响其他程序。

            

     case WM_CREATE:
        {
            //注册热键
            g_hotkeyid = GlobalAddAtom(L"VK_LEFT") - 0xC000;
            RegisterHotKey(hWnd, g_hotkeyid, 0, VK_NEXT);
        }
            break;
        case WM_DESTROY:
        {
            //反注册热键
            UnregisterHotKey(hWnd, g_hotkeyid);
            PostQuitMessage(0);
        }
        break;
        case WM_HOTKEY:
        {
            HWND focusWnd = GetForegroundWindow();
            DWORD focusThreadId = GetWindowThreadProcessId(focusWnd, NULL);
            DWORD currentThreadId = GetCurrentThreadId();
            if (focusThreadId == currentThreadId)
            {
                Draw();
            }
            else
            {
                //吐出事件
               PostMessage(focusWnd, WM_KEYDOWN, VK_NEXT, 0x01510001);
               PostMessage(focusWnd, WM_CHAR, VK_NEXT, 0x01510001);
                
            }
        }

               实测对网页,visual studio等软件都运行良好。

               但是对office软件无效,原因暂时不明。

            

            

  • 相关阅读:
    微软首届Power Platform开发黑客松大赛
    PowerApps 简介
    PowerBI KPI 演示
    什么是Power Platform低代码
    利用Microsoft PowerApps模板,一分钟创建Service Desk服务程序
    Power Platform
    Microsoft Power Platform 低代码开发平台
    登录监听Enter键
    代理配置
    Enjoy the pain about Moloch
  • 原文地址:https://www.cnblogs.com/xuhuajie/p/14921253.html
Copyright © 2011-2022 走看看