读书人

C#自定义快捷键兑现介绍

发布时间: 2012-09-13 09:51:53 作者: rapoo

C#自定义快捷键实现介绍

?

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

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

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

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

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

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

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

?

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;//要使用DllImport语句必须引用该命名空间   using System.Runtime.InteropServices;//要使用Process语句必须引用该命名空间   using System.Diagnostics;namespace WindowsApplication4{    public partial class Form1 : Form    {        //user32.dll是非托管代码,不能用命名空间的方式直接引用,        //所以需要用“DllImport”进行引入后才能使用           [DllImport("user32.dll", SetLastError = true)]        public static extern bool RegisterHotKey(        IntPtr hWnd, //要定义热键的窗口的句柄           int id, //定义热键ID(不能与其它ID重复)              //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效         KeyModifiers fsModifiers,        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,            CtrlAndShift = 6        }        private void Form1_Load(object sender, EventArgs e)        {            //注册热键Shift+S,Id号为100。KeyModifiers.Shift也可以直接使用数字4来表示。              RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S);            //注册热键Ctrl+B,Id号为101。KeyModifiers.Ctrl也可以直接使用数字2来表示。              RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.B);            //注册热键Alt+D,Id号为102。KeyModifiers.Alt也可以直接使用数字1来表示。               RegisterHotKey(Handle, 102, KeyModifiers.Alt, Keys.D);            //注册热键Ctrl+Alt+0,Id号为103。KeyModifiers.CtrlAndAlt也可以直接使用数字3来表示。               RegisterHotKey(Handle, 103, KeyModifiers.CtrlAndShift, Keys.D0);        }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            //注销Id号为100的热键设定               UnregisterHotKey(Handle, 100);            //注销Id号为101的热键设定               UnregisterHotKey(Handle, 101);            //注销Id号为102的热键设定               UnregisterHotKey(Handle, 102);            //注销Id号为103的热键设定               UnregisterHotKey(Handle, 103);        }        protected override void WndProc(ref Message m)        {            const int WM_HOTKEY = 0x0312;            //按快捷键               switch (m.Msg)            {                case WM_HOTKEY:                    switch (m.WParam.ToInt32())                    {                        case 100: //按下的是Shift+S                               //此处填写快捷键响应代码                               break;                        case 101: //按下的是Ctrl+B                               //此处填写快捷键响应代码                               break;                        case 102: //按下的是Alt+D                               //此处填写快捷键响应代码                               break;                        case 103: //按下的是Ctrl+Shift+0                               {                                Process Myprocess;                                try                                {                                    //这段程序功能为:按下Ctrl+Shift+0后显示桌面                                       Myprocess = new System.Diagnostics.Process();                                    Myprocess.StartInfo.FileName = @"C:\ShowDesktop.scf";                                    Myprocess.StartInfo.Verb = "Open";                                    Myprocess.Start();                                }                                catch (Exception ex)                                {                                    //程序出错时提示信息                                       MessageBox.Show(                                    ex.Message, "信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);                                }                                break;                            }                    }                    break;            }            base.WndProc(ref m);        }        public Form1()        {            InitializeComponent();        }    }}
?

?

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

读书人网 >C#

热点推荐