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; //热键IDprotected override void WndProc(ref Message m){base.WndProc(ref m);switch (m.Msg){case WM_HOTKEY: //窗口消息-热键IDswitch (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;}}

转载于:https://www.cnblogs.com/wcnm/p/4045356.html

C# 全局热键设置 与 窗体热键设置相关推荐

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

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

  2. C#窗体应用设置多窗体和设置启动窗体

    场景 VS中使用C#开发一个登录窗体应用程序: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99439474 一个完整的Wind ...

  3. 【转载】C#窗体热键与全局热键设置

    声明:本文为转载,非原创,如有侵权,请告知,本人会尽快删除. 原文地址:http://www.jb51.net/article/56625.htm 本文实例讲述了C#全局热键设置与窗体热键设置,分享给 ...

  4. winform窗体热键设置

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

  5. 【Android】Android 设置Activity窗体 不显示标题和全屏显示

    [一]Android 设置Activity窗体 不显示标题 android:theme="@android:style/Theme.NoTitleBar" 1 <activi ...

  6. 程序启动时,vc2015设置哪个窗体先打开,优先启动,设置方法

    程序启动时,vc2015设置哪个窗体先打开,设置方法 工程名对应的APP文件中 InitInstance中 //Caccess_mdb_operationDlg dlg;  //可以设置这里,首先启动 ...

  7. Java 实训 使用弹出对话框设置主窗体中的文本字体

     实训要求: 编写一个主窗体,该窗体有"设置字体"按钮和一个文本区. 编写一个JDialog的子类; FontDialog,其中使用下拉列表显示全部 字体的名称,当选择下拉列表中某 ...

  8. C# MDI窗体的设置

    在 Windows 窗体应用程序中,经常会在一个窗体中打开另一个窗体, 通过窗体上的不同菜单选择不同的操作,这种在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现. MDI (Mul ...

  9. html按键精灵怎么设置,按键精灵如何设置循环?按键精灵设置循环的方法步骤...

    按键精灵如何设置循环?最近有很多小伙伴向我询问按键精灵中的循环如何设置,那么今天小编就给大家带来按键精灵设置循环的方法步骤,让我们一起来看看吧. 方法/步骤 1.先在我们电脑桌面找到按键精灵软件的打开 ...

最新文章

  1. pptpd的远程连接成功并使用
  2. CentOS 初体验七:常用命令
  3. 如何设置Jupiter Notebook服务器并从任何地方访问它(Windows 10)
  4. Tensorflow(r1.4)API--tf.nn.dropout
  5. 以后所有经济时事的点评都不在这里
  6. POJ - 1458(最长公共子序列,动态规划)
  7. pmp 资料_1年 = 15300订阅 + 超100万次收听 (感恩有您,这些PMP备考资料您值得拥有!)...
  8. Qt制作局域网即时通讯软件
  9. 速卖通关键词挖掘工具_谷歌优化关键词挖掘工具大全
  10. 企业组织架构的架构图用思维导图软件怎么做?
  11. gitlab 版本升级
  12. 2021Q2产品团队绩效总结--管理日记
  13. C# 给Word每一页设置不同图片水印
  14. 企业级运维——Mysql主从复制(异步、半同步、全同步)
  15. Apache JMeter安装
  16. Crypto.jsAPI官方快速使用指南--全到你掉牙
  17. 【面试题】:工人分金条问题
  18. python:matplotlib基础(3)
  19. 宽带信号的DOA估计学习笔记(四):空间分辨率
  20. 海比研究院专访伙伴云VP袁兆江:大厂入局,低代码赛道如何突围?

热门文章

  1. C语言——动态内存分配
  2. 今天花了些时间捯饬了下Silverlight,可是DEBUG时出了这么个状况
  3. 职高计算机专业理论知识,浅论职高计算机专业教学
  4. element-ui的表单重置方法resetFields()无效问题
  5. DWG文件的预览图像数据结构
  6. memcached客户端和连接池
  7. 思科模拟器的了解和使用
  8. 属性动画+购物详情+购物车
  9. 让visual studio 工具箱重新找回失去的DevExpess第三方组件
  10. jmeter自带脚本录制功能使用教程