C#编程实现自定义热键的方法

作者:我心依旧 时间:2023-12-05 23:57:18 

本文实例讲述了C#编程实现自定义热键的方法。分享给大家供大家参考。具体实现方法如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
using System.Net;
using System.Drawing.Drawing2D;
namespace App
{
public partial class Form2 : Form
{
 public Form2()
 {
  InitializeComponent();
  //程序加载加载热键
  this.Load += delegate
  {
   // 热键一:Control +光标左箭头
   CustomSystemKeyBoard.RegisterHotKey(Handle, 100, 8, Keys.Left);
   // 热键一:Control +光标右箭头
   CustomSystemKeyBoard.RegisterHotKey(Handle, 200, 2, Keys.Right);
   // 热键一:Control +光标上箭头
   CustomSystemKeyBoard.RegisterHotKey(Handle, 300, 2, Keys.Up);
   // 热键一:Control +光标下箭头
   CustomSystemKeyBoard.RegisterHotKey(Handle, 400, 2, Keys.Down);
  };
  //在程序退出时取消热键的注册
  this.FormClosing += delegate
  {
   CustomSystemKeyBoard.UnregisterHotKey(Handle, 100);
   CustomSystemKeyBoard.UnregisterHotKey(Handle, 200);
   CustomSystemKeyBoard.UnregisterHotKey(Handle, 300);
   CustomSystemKeyBoard.UnregisterHotKey(Handle, 400);
  };
 }
 protected override void WndProc(ref Message m)
 {
  //如果m.Msg的值为0x0312那么表示用户按下了热键
  const int WM_HOTKEY = 0x0312;
  switch (m.Msg)
  {
   case WM_HOTKEY:
    ProcessKey(m);
    break;
  }
  base.WndProc(ref m);
 }
 /// <summary>
 /// 按下热键的操作
 /// </summary>
 /// <param name="m"></param>
 protected void ProcessKey(Message m)
 {
  //IntPtr用于表示指针或句柄的平台特定类型
  string id = m.WParam.ToString();
  MessageBox.Show(id);
  switch (id)
  {
   case "100":
    //
    break;
   case "200":
    break;
   case "300":
    break;
   case "400":
    break;
  }
 }
}
public class CustomSystemKeyBoard
{
 /// <summary>
 /// 声明API函数
 /// </summary>
 /// <param name="hWnd">Handle</param>
 /// <param name="id">热键id</param>
 /// <param name="fsModifiers">热键类型(KeyModifiers)</param>
 /// <param name="vk">键盘按键</param>
 /// <returns></returns>
 [System.Runtime.InteropServices.DllImport("user32.dll")]
 public static extern bool RegisterHotKey(
  IntPtr hWnd,
  int id,
  uint fsModifiers,
  Keys vk
  );
 /// <summary>
 /// 声明API函数
 /// </summary>
 /// <param name="hWnd"></param>
 /// <param name="id"></param>
 /// <returns></returns>
 [System.Runtime.InteropServices.DllImport("user32.dll")]
 public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
 /// <summary>
 /// 定义一个KeyModifiers的枚举,以便出现组合键
 /// </summary>
 public enum KeyModifiers
 {
  None = 0,
  Alt = 1,
  Control = 2,
  Shift = 3,
  Windows = 8
 }
}
}

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,自定义,热键
0
投稿

猜你喜欢

  • SpringBoot基于数据库的定时任务统一管理的实现

    2023-12-10 12:57:47
  • 关于C++数组中重复的数字

    2023-01-21 03:29:43
  • Java fastdfs客户端实现上传下载文件

    2023-11-26 09:45:41
  • android中RecyclerView自定义分割线实现

    2023-08-03 17:37:47
  • MyBatis中的模糊查询语句

    2022-09-30 03:36:59
  • Android自定义View实现标签流效果

    2021-12-13 16:09:39
  • java使用正则表达校验手机号码示例(手机号码正则)

    2022-04-07 20:37:04
  • winform 中显示异步下载的图片

    2022-09-03 19:04:07
  • java8中Stream的使用以及分割list案例

    2022-08-09 10:08:48
  • Java微信公众号开发之通过微信公众号获取用户信息

    2021-12-16 08:19:19
  • Spring中的使用@Async异步调用方法

    2023-07-10 17:20:28
  • struts2中使用注解配置Action方法详解

    2023-08-30 00:01:25
  • c++虚函数与虚函数表原理

    2023-12-09 07:22:45
  • java 类加载与自定义类加载器详解

    2022-05-21 04:31:31
  • Spring Cloud Gateway替代zuul作为API网关的方法

    2023-05-03 07:19:58
  • C#遍历得到checkboxlist选中值和设置选中项的代码

    2022-10-25 20:52:22
  • WPF自定义TreeView控件样式实现QQ联系人列表效果

    2023-02-01 06:34:17
  • Springboot文件上传功能的实现

    2021-09-20 12:48:47
  • c#使用Socket发送HTTP/HTTPS请求的实现代码

    2023-10-12 07:10:00
  • 浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件

    2022-07-12 14:32:17
  • asp之家 软件编程 m.aspxhome.com