返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现全局快捷键功能
  • 912
分享到

C#实现全局快捷键功能

2024-04-02 19:04:59 912人浏览 八月长安
摘要

在C#中使用全局快捷键 由于.net并没有提供快捷键的库,所以要使用该功能得通过api实现。 在winapi中,注册和注销全局快捷键分别是通过ReGISterHoTKEy和Unreg

C#中使用全局快捷键

由于.net并没有提供快捷键的库,所以要使用该功能得通过api实现。

在winapi中,注册和注销全局快捷键分别是通过ReGISterHoTKEyUnregisterHotKey函数实现。在c#中直接使用该api显得不够简洁,这里我提供了一个友好点的封装。

代码如下:

    static class Hotkey
    {
        #region 系统api
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, Keys vk);

        [DllImport("user32.dll")]
        static extern bool UnregisterHotKey(IntPtr hWnd, int id);
        #endregion

        /// <summary> 
        /// 注册快捷键 
        /// </summary> 
        /// <param name="hWnd">持有快捷键窗口的句柄</param> 
        /// <param name="fsModifiers">组合键</param> 
        /// <param name="vk">快捷键的虚拟键码</param> 
        /// <param name="callBack">回调函数</param> 
        public static void Regist(IntPtr hWnd, HotkeyModifiers fsModifiers, Keys vk, HotKeyCallBackHanlder callBack)
        {
            int id = keyid++;
            if (!RegisterHotKey(hWnd, id, fsModifiers, vk))
                throw new Exception("regist hotkey fail.");
            keymap[id] = callBack;
        }

        /// <summary> 
        /// 注销快捷键 
        /// </summary> 
        /// <param name="hWnd">持有快捷键窗口的句柄</param> 
        /// <param name="callBack">回调函数</param> 
        public static void UnRegist(IntPtr hWnd, HotKeyCallBackHanlder callBack)
        {
            foreach (KeyValuePair<int, HotKeyCallBackHanlder> var in keymap)
            {
                if (var.Value == callBack)
                    UnregisterHotKey(hWnd, var.Key);
            }
        }

        /// <summary> 
        /// 快捷键消息处理 
        /// </summary> 
        public static void ProcesshotKey(System.windows.FORMs.Message m)
        {
            if (m.Msg == WM_HOTKEY)
            {
                int id = m.WParam.ToInt32();
                HotKeyCallBackHanlder callback;
                if (keymap.TryGetValue(id, out callback))
                {
                    callback();
                }
            }
        }

        const int WM_HOTKEY = 0x312;
        static int keyid = 10;
        static Dictionary<int, HotKeyCallBackHanlder> keymap = new Dictionary<int, HotKeyCallBackHanlder>();

        public delegate void HotKeyCallBackHanlder();
    }

    enum HotkeyModifiers
    {
        MOD_ALT = 0x1,
        MOD_CONTROL = 0x2,
        MOD_SHIFT = 0x4,
        MOD_WIN = 0x8
    }

这里通过Hotkey类实现功能的封装,使用非常简单。下面为参考测试代码。

        void Test()
        {
            MessageBox.Show("Test");
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            Hotkey.ProcessHotKey(m);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Hotkey.UnRegist(this.Handle, Test);
        }

到此这篇关于C#实现全局快捷键功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现全局快捷键功能

本文链接: https://www.lsjlt.com/news/151646.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#实现全局快捷键功能
    在c#中使用全局快捷键 由于.net并没有提供快捷键的库,所以要使用该功能得通过api实现。 在winapi中,注册和注销全局快捷键分别是通过RegisterHotKey和Unreg...
    99+
    2024-04-02
  • 在WPF中实现全局快捷键功能
    今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了。 ...
    99+
    2024-04-02
  • idea全局搜索快捷键总结
    idea全局搜索快捷键总结 一、Ctrl+F或者Ctrl+Shift+R 按照文本的内容查找1. 相当于eclipse的ctrl+H,Ctrl+F是在本页查找2. 相当于eclipse的ctrl+H,Ctrl+Shift+R是全局查...
    99+
    2023-08-30
    intellij-idea java ide
  • 怎样实现C#button快捷键
    本篇文章为大家展示了怎样实现C#button快捷键,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面介绍三种方法实现C# button快捷键,如Alt + *(按钮快捷键),Ctrl+*及其他组合键...
    99+
    2023-06-17
  • win11功能快捷键有哪些
    这篇文章主要介绍“win11功能快捷键有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win11功能快捷键有哪些”文章能帮助大家解决问题。一、F1:帮助在桌面、部分支持帮助的系统软件里可以使用。...
    99+
    2023-07-02
  • javascript实现快捷键
    随着Web技术的不断发展,Javascript已经成为了Web前端开发中不可或缺的一部分。Javascript是一种弱类型、基于对象(面向对象)、事件驱动、解释型的语言,拥有跨平台和跨浏览器的特性,其应用场景涵盖了网页交互、动态效果、数据验...
    99+
    2023-05-22
  • Vue实现快捷键录入功能的示例代码
    项目需要在页面使用快捷键,而且需要对快捷键进行维护,然后参考了此篇文章,改成自己的。 记录一下。 首先有一个组件,用来实现快捷键的录入操作。 直接上代码: hotkeyInput.v...
    99+
    2024-04-02
  • c# 屏蔽快捷键的实现示例
    目录前言 原理 实现 1、Program类2、Form1类3、声明windows apiPS:前言 有时候开发会遇到这样一个需求,软件需要屏蔽用户的组合快捷键或某些按键,避免强制退...
    99+
    2024-04-02
  • Win10实用快捷键大全Win10实用的快捷键详细介绍
    许多盆友都掌握一些应用计算机的快捷键,可以合理提高工作效率,可是还有一些不为人知可是的确很实用的快捷键作用,今日系统之家我给各位朋友产生了Win10实用快捷键大全,介绍一下Win10实用的快捷键,期待对您有协助。不用登录QQ,不用登陆微信,...
    99+
    2023-07-11
  • win10怎么实现快捷键快速开启与关闭蓝牙功能
    本篇内容主要讲解“win10怎么实现快捷键快速开启与关闭蓝牙功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10怎么实现快捷键快速开启与关闭蓝牙功能”吧!具体操作:打开设置以后,选择【设...
    99+
    2023-06-27
  • Linux top命令的常用快捷键功能
    这篇文章主要介绍“Linux top命令的常用快捷键功能”,在日常操作中,相信很多人在Linux top命令的常用快捷键功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux top命令的常用快捷键功能...
    99+
    2023-06-16
  • Windows10 Alt+Tab快捷键有哪些新功能
    这篇“Windows10 Alt+Tab快捷键有哪些新功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Windows10 ...
    99+
    2023-07-01
  • Android Studio常用快捷键功能有哪些
    这篇文章主要为大家展示了“Android Studio常用快捷键功能有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android Studio常用快捷键功能有哪些”这篇文章吧。Androi...
    99+
    2023-05-30
    android studio
  • idea全局搜索快捷键超详细总结(推荐!)
    目录一、Ctrl+F或者Ctrl+Shift+R 按照文本的内容查找二、Ctrl+Shift+N按文件名搜索文件三、Ctrl+H 查看类的继承关系四、Alt+F7查找类或方法在哪被使...
    99+
    2023-01-11
    idea中的搜索快捷键 idea中搜索方法的快捷键 idea全局搜索方法
  • Python快速实现一键抠图功能的全过程
    简介 使用百度深度学习框架paddlepaddle对人像图片进行自动化抠图 安装 根据PaddlePaddle官网命令安装 如 pip install paddlepaddle...
    99+
    2024-04-02
  • PyCharm编辑器的功能和快捷键详解
    PyCharm是一款由JetBrains公司开发的针对Python开发的集成开发环境(IDE)。PyCharm集成了许多功能,使得Python开发变得更加高效和便捷。下面将介绍PyCh...
    99+
    2024-02-26
    编辑器 pycharm 快捷键 重构代码 python程序
  • Android Studio中快捷键实现try catch等功能包含代码块的实现方法
     Android Studio中快捷键实现try catch等功能包含代码块1、windows系统下,只需选中需包含的代码块,按快捷键Ctry+Alt+T即可;2、Ubuntu下由于快捷键已经被占用,故需要自行重新设定,设定过程如...
    99+
    2023-05-30
    android studio 快捷键
  • WPF如何实现监听快捷键
    今天小编给大家分享一下WPF如何实现监听快捷键的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.调用Win32 API优先级...
    99+
    2023-07-05
  • 如何解决goland,idea全局搜索快捷键失效问题
    目录1.问题现象2.问题分析3.问题解决4.解决冲突问题4.1搜狗输入法4.2王牌输入法4.3微软输入法5.总结1.问题现象 在编辑器中按Ctrl + shift + F,没有反应,...
    99+
    2024-04-02
  • linux中qq如何添加快捷键启动功能
    这篇文章主要为大家展示了“linux中qq如何添加快捷键启动功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中qq如何添加快捷键启动功能”这篇文章吧。linux不能在属性中设置qq快...
    99+
    2023-06-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作