C#自定义快捷键的实现

开发 后端
本文主要介绍如何实现C#自定义快捷键(系统热键),例如QQ软件的Ctrl+Enter快捷键用来发送消息。

这篇文章以按下Ctrl+Shift+0实现显示桌面为例,采用C#编写的程序代码说明C#自定义快捷键的实现。

读者可以依此类推,通过按下某些键可以实现一些自定义的功能,只要修改下面代码中RegisterHotKey 的参数和case语句中的执行内容即可。

下面给的示例程序中关键处都具有注释。

下面给出一个完整的可运行的C#编写的示例程序

打开VS2005集成开发环境,新建一个windows应用程序,下面的是Form1.cs的全部代码。

(说明:要使该程序正确运行,必须把下面代码中的C:\ShowDesktop.scf替换成你本机的“显示桌面.scf”文件所在的路径)

C#自定义快捷键实现代码

  1. using System;  
  2.  
  3. using System.Collections.Generic;  
  4.  
  5. using System.ComponentModel;  
  6.  
  7. using System.Data;  
  8.  
  9. using System.Drawing;  
  10.  
  11. using System.Text;  
  12.  
  13. using System.Windows.Forms;  
  14.  
  15.  
  16. //要使用DllImport语句必须引用该命名空间  
  17.  
  18. using System.Runtime.InteropServices;  
  19.  
  20. //要使用Process语句必须引用该命名空间  
  21.  
  22. using System.Diagnostics;  
  23.  
  24.  
  25. namespace WindowsApplication4  
  26.  
  27. {  
  28.  
  29. public partial class Form1 : Form  
  30.  
  31. {  
  32.  
  33. //user32.dll是非托管代码,不能用命名空间的方式直接引用,所以需要用“DllImport”进行引入后才能使用  
  34.  
  35. [DllImport("user32.dll", SetLastError = true)]  
  36.  
  37. public static extern bool RegisterHotKey(  
  38.  
  39. IntPtr hWnd, //要定义热键的窗口的句柄  
  40.  
  41. int id, //定义热键ID(不能与其它ID重复)   
  42.  
  43. KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效  
  44.  
  45. Keys vk //定义热键的内容  
  46.  
  47. );  
  48.  
  49.  
  50. [DllImport("user32.dll", SetLastError = true)]  
  51.  
  52. public static extern bool UnregisterHotKey(  
  53.  
  54. IntPtr hWnd, //要取消热键的窗口的句柄  
  55.  
  56. int id //要取消热键的ID  
  57.  
  58. );  
  59.  
  60.  
  61. //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)  
  62.  
  63. [Flags()]  
  64.  
  65. public enum KeyModifiers  
  66.  
  67. {  
  68.  
  69. None = 0,  
  70.  
  71. Alt = 1,  
  72.  
  73. Ctrl = 2,  
  74.  
  75. Shift = 4,  
  76.  
  77. WindowsKey = 8,  
  78.  
  79. CtrlAndShift = 6  
  80.  
  81. }  
  82.  
  83.  
  84. private void Form1_Load(object sender, EventArgs e)  
  85.  
  86. {  
  87.  
  88. //注册热键Shift+S,Id号为100。KeyModifiers.Shift也可以直接使用数字4来表示。  
  89.  
  90. RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S);  
  91.  
  92. //注册热键Ctrl+B,Id号为101。KeyModifiers.Ctrl也可以直接使用数字2来表示。  
  93.  
  94. RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.B);  
  95.  
  96. //注册热键Alt+D,Id号为102。KeyModifiers.Alt也可以直接使用数字1来表示。  
  97.  
  98. RegisterHotKey(Handle, 102, KeyModifiers.Alt, Keys.D);  
  99.  
  100. //注册热键Ctrl+Alt+0,Id号为103。KeyModifiers.CtrlAndAlt也可以直接使用数字3来表示。  
  101.  
  102. RegisterHotKey(Handle, 103, KeyModifiers.CtrlAndShift, Keys.D0);  
  103.  
  104. }  
  105.  
  106.  
  107. private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  108.  
  109. {  
  110.  
  111. //注销Id号为100的热键设定  
  112.  
  113. UnregisterHotKey(Handle, 100);  
  114.  
  115. //注销Id号为101的热键设定  
  116.  
  117. UnregisterHotKey(Handle, 101);  
  118.  
  119. //注销Id号为102的热键设定  
  120.  
  121. UnregisterHotKey(Handle, 102);  
  122.  
  123. //注销Id号为103的热键设定  
  124.  
  125. UnregisterHotKey(Handle, 103);  
  126.  
  127.  
  128. }  
  129.  
  130.  
  131. protected override void WndProc(ref Message m)  
  132.  
  133. {  
  134.  
  135. const int WM_HOTKEY = 0x0312;  
  136.  
  137. //按快捷键  
  138.  
  139. switch (m.Msg)  
  140.  
  141. {  
  142.  
  143. case WM_HOTKEY:  
  144.  
  145. switch (m.WParam.ToInt32())  
  146.  
  147. {  
  148.  
  149. case 100: //按下的是Shift+S  
  150.  
  151. //此处填写快捷键响应代码  
  152.  
  153. break;  
  154.  
  155. case 101: //按下的是Ctrl+B  
  156.  
  157. //此处填写快捷键响应代码  
  158.  
  159. break;  
  160.  
  161. case 102: //按下的是Alt+D  
  162.  
  163. //此处填写快捷键响应代码  
  164.  
  165. break;  
  166.  
  167. case 103: //按下的是Ctrl+Shift+0  
  168.  
  169. {  
  170.  
  171. Process Myprocess;  
  172.  
  173. try 
  174.  
  175. {  
  176.  
  177. //这段程序功能为:按下Ctrl+Shift+0后显示桌面  
  178.  
  179. Myprocess = new System.Diagnostics.Process();  
  180.  
  181. Myprocess.StartInfo.FileName = @"C:\ShowDesktop.scf";  
  182.  
  183. Myprocess.StartInfo.Verb = "Open";  
  184.  
  185. Myprocess.Start();  
  186.  
  187. }  
  188.  
  189. catch (Exception ex)  
  190.  
  191. {  
  192.  
  193. //程序出错时提示信息  
  194.  
  195. MessageBox.Show(ex.Message, "信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);  
  196.  
  197. }  
  198.  
  199. break;  
  200.  
  201. }  
  202.  
  203. }  
  204.  
  205. break;  
  206.  
  207. }  
  208.  
  209. base.WndProc(ref m);  
  210.  
  211. }  
  212.  
  213.  
  214.  
  215. public Form1()  
  216.  
  217. {  
  218.  
  219. InitializeComponent();  
  220.  
  221. }  
  222.  
  223. }  
  224.  
  225. }  

通过上述代码就实现了C#自定义快捷键的设置,大家可以尝试一下。

【编辑推荐】

  1. C#自定义控件的开发:Pin和Connector
  2. 比较C#自定义控件的property(属性)和/attribute(性质)
  3. C#组件开发:COM和.NET对象之间的互操作
  4. 介绍.NET平台、C#和ASP.NET
  5. C# Attributes:定义设计期信息
责任编辑:book05 来源: hi.baidu
相关推荐

2011-09-05 18:54:03

windowsUbuntu

2009-09-10 18:06:25

C# button快捷

2009-08-10 10:43:18

Visual C#快捷

2009-08-04 08:58:01

C#自定义特性

2009-08-21 18:02:41

C#快捷键

2009-08-04 12:56:51

C#自定义事件

2009-09-03 15:46:57

C#自定义事件

2009-08-03 13:34:06

自定义C#控件

2009-08-28 17:45:19

C#自定义数据

2009-08-03 13:39:46

C#自定义用户控件

2009-08-04 13:31:35

C#自定义事件

2009-08-05 17:03:37

C#自定义控件

2009-08-04 09:56:46

C#事件处理自定义事件

2021-06-17 06:52:37

C#自定义异常

2009-08-17 17:24:02

C#自定义消息框

2009-06-16 13:53:00

netbeans 快捷

2009-08-04 12:40:34

c#自定义事件

2009-08-12 14:53:50

C#类型转换函数

2017-12-05 08:50:51

2009-08-03 16:37:49

C#异常类
点赞
收藏

51CTO技术栈公众号