返回顶部
首页 > 资讯 > 精选 >​C#怎么注册多个全局热键
  • 512
分享到

​C#怎么注册多个全局热键

​C# 2023-10-23 11:10:27 512人浏览 独家记忆
摘要

要在C#中注册多个全局热键,可以使用windows api中的ReGISterHoTKEy函数。以下是一个示例代码,演示如何在C#中

要在C#中注册多个全局热键,可以使用windows api中的ReGISterHoTKEy函数。以下是一个示例代码,演示如何在C#中注册多个全局热键:

using System;
using System.Runtime.InteropServices;
using System.Windows.FORMs;

public class HotKeyManager
{
    // 导入Windows API中的RegisterHotKey函数
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

    // 导入Windows API中的UnregisterHotKey函数
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    // 定义热键的标识符
    private const int HOTKEY_ID_1 = 1;
    private const int HOTKEY_ID_2 = 2;

    // 定义热键的键值和修饰键
    private const int HOTKEY_MODIFIER_1 = 0x0002; // Ctrl键
    private const int HOTKEY_MODIFIER_2 = 0x0001; // Alt键
    private const int HOTKEY_VK_1 = (int)Keys.F1;
    private const int HOTKEY_VK_2 = (int)Keys.F2;

    // 定义热键的响应事件
    public event EventHandler HotKeyPressed1;
    public event EventHandler HotKeyPressed2;

    public HotKeyManager(IntPtr hWnd)
    {
        // 注册第一个热键
        RegisterHotKey(hWnd, HOTKEY_ID_1, HOTKEY_MODIFIER_1, HOTKEY_VK_1);

        // 注册第二个热键
        RegisterHotKey(hWnd, HOTKEY_ID_2, HOTKEY_MODIFIER_2, HOTKEY_VK_2);

        // 注册全局热键消息的处理函数
        ComponentDispatcher.ThreadPreproceSSMessage += ThreadPreprocessMessage;
    }

    private void ThreadPreprocessMessage(ref MSG msg, ref bool handled)
    {
        if (handled)
            return;

        if (msg.message == WM_HOTKEY)
        {
            switch (msg.wParam.ToInt32())
            {
                case HOTKEY_ID_1:
                    // 触发第一个热键的事件
                    HotKeyPressed1?.Invoke(this, EventArgs.Empty);
                    handled = true;
                    break;
                case HOTKEY_ID_2:
                    // 触发第二个热键的事件
                    HotKeyPressed2?.Invoke(this, EventArgs.Empty);
                    handled = true;
                    break;
            }
        }
    }

    public void UnregisterHotKeys(IntPtr hWnd)
    {
        // 注销热键
        UnregisterHotKey(hWnd, HOTKEY_ID_1);
        UnregisterHotKey(hWnd, HOTKEY_ID_2);
    }

    private const int WM_HOTKEY = 0x0312;
    [StructLayout(LayoutKind.Sequential)]
    private struct MSG
    {
        public IntPtr hwnd;
        public int message;
        public IntPtr wParam;
        public IntPtr lParam;
        public int time;
        public POINT pt;
    }
    [StructLayout(LayoutKind.Sequential)]
    private struct POINT
    {
        public int X;
        public int Y;
    }
}

使用示例:

public partial class MainForm : Form
{
    private HotKeyManager hotKeyManager;

    public MainForm()
    {
        InitializeComponent();
        hotKeyManager = new HotKeyManager(this.Handle);
        hotKeyManager.HotKeyPressed1 += HotKeyManager_HotKeyPressed1;
        hotKeyManager.HotKeyPressed2 += HotKeyManager_HotKeyPressed2;
    }

    private void HotKeyManager_HotKeyPressed1(object sender, EventArgs e)
    {
        // 第一个热键被触发时的处理逻辑
        MessageBox.Show("第一个热键被触发");
    }

    private void HotKeyManager_HotKeyPressed2(object sender, EventArgs e)
    {
        // 第二个热键被触发时的处理逻辑
        MessageBox.Show("第二个热键被触发");
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
        hotKeyManager.UnregisterHotKeys(this.Handle);
    }
}

在上述示例中,我们创建了一个HotKeyManager类来管理热键的注册和处理。通过调用RegisterHotKey函数注册热键,通过调用UnregisterHotKey函数注销热键。在HotKeyManager类中,我们使用ComponentDispatcher.ThreadPreprocessMessage事件来监听全

--结束END--

本文标题: ​C#怎么注册多个全局热键

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

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

猜你喜欢
  • ​C#怎么注册多个全局热键
    要在C#中注册多个全局热键,可以使用Windows API中的RegisterHotKey函数。以下是一个示例代码,演示如何在C#中...
    99+
    2023-10-23
    ​C#
  • 错误:使用C#无法注册热键
    对不起,但是您是正确的,使用C#无法直接注册全局热键。这是因为C#的框架并没有提供直接的方法来注册全局热键。然而,您可以使用一些Wi...
    99+
    2023-09-26
    C#
  • PHP注册一个或多个全局变量与当前会话
    ...
    99+
    2024-04-02
  • VUE中怎么注册全局组件和局部组件
    这篇文章将为大家详细讲解有关VUE中怎么注册全局组件和局部组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。全局组件第一步:在components文件夹下建...
    99+
    2024-04-02
  • Vue中怎么封装一个自动化注册全局组件
    这篇文章主要介绍“Vue中怎么封装一个自动化注册全局组件”,在日常操作中,相信很多人在Vue中怎么封装一个自动化注册全局组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中怎么封装一个自动化注册全局组件...
    99+
    2023-06-25
  • Vue中怎么全局注册组件并引用
    这篇文章将为大家详细讲解有关Vue中怎么全局注册组件并引用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、正则判断路径以及文件名,获取全部组件并全局注册(...
    99+
    2024-04-02
  • vue3全局组件自动注册功能怎么实现
    本篇内容主要讲解“vue3全局组件自动注册功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3全局组件自动注册功能怎么实现”吧!vue3全局组件自动注册建文件需要在src/comp...
    99+
    2023-07-06
  • Vue全局注册中的kebab-case和PascalCase怎么使用
    这篇文章主要介绍“Vue全局注册中的kebab-case和PascalCase怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue全局注册中的kebab-case和PascalCase怎么使...
    99+
    2023-07-05
  • vue全局注册自定义指令防抖怎么实现
    本文小编为大家详细介绍“vue全局注册自定义指令防抖怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue全局注册自定义指令防抖怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。全局注册自定义指令防抖...
    99+
    2023-06-30
  • 手把手教你写一个vue全局注册的Toast的实现
    目录前言:我们先思考下面的问题:首先:然后:后来:再且:前言: 前几天客户经理不让我用某饿了么之类的UI库做一个轻提示之类的组件,当时一想我是饿了么战士,怎么会写哪个东西,然后我就想...
    99+
    2024-04-02
  • C# 中怎么使用button定义热键
    今天就跟大家聊聊有关C# 中怎么使用button定义热键,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# button定义热键方法一:在button的text属性中输入&f...
    99+
    2023-06-17
  • c#怎么一键注释
    在 c# 中,可以通过快捷键 ctrl + k + c 一键对代码进行注释,包括单行注释 (//) 和多行注释 (/ /)。对于其他编辑器,注释快捷键可能不同,请查阅其文档以获取准确信息...
    99+
    2024-05-12
    c#
  • C#中怎么操作注册表
    这篇文章将为大家详细讲解有关C#中怎么操作注册表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。要操作注册表,我们必须要引入必要的命名空间:using Microsoft.Win32...
    99+
    2023-06-17
  • C#中怎么编辑注册表
    C#中怎么编辑注册表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册...
    99+
    2023-06-17
  • JavaScript的Symbol类型、隐藏属性及全局注册表怎么创建
    本文小编为大家详细介绍“JavaScript的Symbol类型、隐藏属性及全局注册表怎么创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript的Symbol类型、隐藏属性及全局注册表怎么创...
    99+
    2024-04-02
  • c#局部变量怎么给全局使用
    在 c# 中,可以通过以下方法使局部变量作为全局变量使用:声明全局变量,使用 static 关键字。声明共享变量,使用 const 关键字。使用静态方法,该方法不依赖于实例。使用委托,将...
    99+
    2024-05-12
    c#
  • c++全局变量怎么定义
    c++ 中全局变量在函数或类外声明,可以在整个程序中访问。定义语法为: [= ];,其中 为数据类型, 为变量名, 为可选的初始值。 C++ 中的全局变量定义 全局变量是指在函数或...
    99+
    2024-05-15
    c++ 作用域
  • 个人怎么注册永久域名
    只要一直续费下去就可以一直使用。个人注册永久域名的方法:只要一直续费下去就可以一直使用,注册域名步骤:选择专业的域名提供商。准备好注册域名的相关资料,如有效身份证复印件。在域名提供商中检测你需要注册的域名是否具有唯一性。如果具有唯一性即可申...
    99+
    2024-04-02
  • 个人怎么注册国外域名
    个人注册国外域名的方法:1.找一个提供国外域名注册的平台;2.进入“域名注册”页面;3.检测域名可用性;4.提交个人资料进行注册即可。个人注册国外域名的方法:找一个提供国外域名注册的平台。注册一个平台账号并登录。再进入其“域名注册”页面。在...
    99+
    2024-04-02
  • 个人域名购买怎么注册
    1. 选择域名注册商:首先需要选择一个可靠的域名注册商。2. 搜索域名:在注册商的网站上搜索所需的域名,确认是否可用。3. 添加到购...
    99+
    2023-06-11
    个人域名 域名
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作