当前位置: 首页 > 编程笔记 >

C#全局热键设置与窗体热键设置实例

南宫勇军
2023-03-14
本文向大家介绍C#全局热键设置与窗体热键设置实例,包括了C#全局热键设置与窗体热键设置实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C#全局热键设置与窗体热键设置,分享给大家供大家参考。具体实现方法如下:

1、窗体热键

首先要设置主窗体KeyPreview为true,可直接在属性中进行设置,
或者在窗体加载中设置: this.KeyPreview = true;
然后添加窗体KeyDown事件,如下:

private void FrmMain_KeyDown(object sender, KeyEventArgs e)

{

    if (e.Alt && e.Shift && e.Control && e.KeyCode == Keys.S)

    {

 MessageBox.Show("我按了Control +Shift +Alt +S");

    }

}

2、全局热键设置

定义API函数 》 注册热键 》 卸载热键

我这里定义了AppHotKey类,全部代码如下:

public class AppHotKey

{

        [DllImport("kernel32.dll")]

        public static extern uint GetLastError();

        //如果函数执行成功,返回值不为0。

        //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。

        [DllImport("user32.dll", SetLastError = true)]

        public static extern bool RegisterHotKey(

            IntPtr hWnd,                //要定义热键的窗口的句柄

            int id,                     //定义热键ID(不能与其它ID重复)           

            KeyModifiers fsModifiers,   //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效

            Keys vk                     //定义热键的内容

            );

        [DllImport("user32.dll", SetLastError = true)]         public static extern bool UnregisterHotKey(             IntPtr hWnd,                //要取消热键的窗口的句柄             int id                      //要取消热键的ID             );

        //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)         [Flags()]         public enum KeyModifiers         {             None = 0,             Alt = 1,             Ctrl = 2,             Shift = 4,             WindowsKey = 8         }         /// <summary>         /// 注册热键         /// </summary>         /// <param name="hwnd">窗口句柄</param>         /// <param name="hotKey_id">热键ID</param>         /// <param name="keyModifiers">组合键</param>         /// <param name="key">热键</param>         public static void RegKey(IntPtr hwnd, int hotKey_id, KeyModifiers keyModifiers, Keys key)         {             try             {                 if (!RegisterHotKey(hwnd, hotKey_id, keyModifiers, key))                 {                     if (Marshal.GetLastWin32Error() == 1409) { MessageBox.Show("热键被占用 !"); }                     else                     {                         MessageBox.Show("注册热键失败!");                     }                 }             }             catch (Exception) { }         }         /// <summary>         /// 注销热键         /// </summary>         /// <param name="hwnd">窗口句柄</param>         /// <param name="hotKey_id">热键ID</param>         public static void UnRegKey(IntPtr hwnd, int hotKey_id)         {             //注销Id号为hotKey_id的热键设定             UnregisterHotKey(hwnd, hotKey_id);         } }

重写窗体的WndProc函数,在窗口创建的时候注册热键,窗口销毁时销毁热键,代码如下:

private const int WM_HOTKEY = 0x312; //窗口消息-热键

private const int WM_CREATE = 0x1; //窗口消息-创建

private const int WM_DESTROY = 0x2; //窗口消息-销毁

private const int Space = 0x3572; //热键ID

protected override void WndProc(ref Message m)

{

    base.WndProc(ref m);

    switch (m.Msg)

    {

 case WM_HOTKEY: //窗口消息-热键ID

     switch (m.WParam.ToInt32())

     {

  case Space: //热键ID

      MessageBox.Show("我按了Control +Shift +Alt +S");

      break;

  default:

      break;

     }

     break;

 case WM_CREATE: //窗口消息-创建

     AppHotKey.RegKey(Handle, Space, AppHotKey.KeyModifiers.Ctrl | AppHotKey.KeyModifiers.Shift | AppHotKey.KeyModifiers.Alt, Keys.S);

     break;

 case WM_DESTROY: //窗口消息-销毁

     AppHotKey.UnRegKey(Handle, Space); //销毁热键

     break;

 default:

     break;

    }

}

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

 类似资料:
  • 有人对如何解决这个问题有什么想法吗?

  • 热门搜索 (热门搜索将显示在前台搜索框下面,前台点击时直接作为关键词进行搜索,多个关键词间用半角逗号 "," 隔开。)

  • 我需要全局热键支持我的Java应用程序。 我想出了一些代码(大部分是复制的),但它不起作用。 HotkeyManager.java: 用户32。爪哇: msg. java: 它确实注册了热键(当程序运行时,按系统中的“F”键不会产生任何结果),但我从未得到任何到控制台的输出。发生了什么?我也知道jintellitype和jnativehook。我不能使用first,至于second,它总是监听所有

  • 主要用于设置三级权限以及密码策略等。 该功能用于设置是否启用三级权限以及密码策略相关配置。参数设置完成后,需要5分钟后生效。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “系统配置/全局设置/全局设置” 菜单项,进入全局设置页面。 目前全局设置支持设置以下选项: 配额检查开关:设置是否启用配额检查,默认关闭配额检查。如用户有配额限制的要求,可以开启配额检查,开启后,用户可以在域或

  • 目前仅支持字典设置和全局设置,参数配置后全局生效。 字典设置 用于自定义云管平台中常用菜单的显示名称。 全局设置 主要用于设置三级权限以及密码策略等。

  • 1)加密设置 加密设置分为,PC加密设置和移动加密设置。 PC加密设置: 当PC加密为“打开”状态时,新上传的视频会进行加密(加密视频只能使用获得场景视频播放器),已上传的视频保持不变。 当PC加密为“关闭”状态时,新上传的视频不会进行加密,已上传的视频保持不变。 移动加密设置: 非加密——当设置成【非加密】时,移动端将不受限制,此时不受保护。 WEB授权——可以在移动WEB端播放和APP端播放,