博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

热键

Posted on 2011-07-14 11:14  汪日平  阅读(311)  评论(0)    收藏  举报

C#注册热键【快捷键】代码

2010-01-28 15:46:39|  分类: 默认分类 |  标签: |字号 订阅

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Runtime.InteropServices;  
using System.Windows.Forms;  
 
namespace WindowsApplication1  
{  
    public class HotKey  
    {  
        //如果函数执行成功,返回值不为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  
        }  
 
    }  

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public class HotKey
    {
        //如果函数执行成功,返回值不为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
        }

    }
}
 

调用方法:

view plaincopy to clipboardprint?
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Text;  
using System.Windows.Forms;  
 
namespace WindowsApplication1  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
 
        private void Form1_Load(object sender, EventArgs e)  
        {  
            //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。  
            HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);  
            //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。  
            HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);  
            //注册热键Ctrl+Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。  
            HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt | HotKey.KeyModifiers.Ctrl, Keys.D);  
            //注册热键F5,Id号为103。  
            HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.None, Keys.F5);  
        }  
 
        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  
                            this.Text = "按下的是Shift+S";  
                            break;  
                        case 101:    //按下的是Ctrl+B  
                            //此处填写快捷键响应代码  
                            this.Text = "按下的是Ctrl+B";  
                            break;  
                        case 102:    //按下的是Alt+D  
                            //此处填写快捷键响应代码  
                            this.Text = "按下的是Ctrl+Alt+D";  
                            break;  
                        case 103:  
                            this.Text = "F5";  
                            break;  
                    }  
                    break;  
            }  
            base.WndProc(ref m);  
        }  
    }  
}