飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

C#注册系统热键、全局快捷键方法

Author:flymorn Source:flymorn
Categories:C#编程 PostTime:2012-7-18 10:23:20
正 文:
    C#注册系统热键、快捷键需要使用RegisterHotKey、UnregisterHotKey调用方法。


    在调用以上两个函数时,我们要先引用 using System.Runtime.InteropServices; 


    ----------------

    C#代码如下:

    ----------------

 
        //注册热键的api
        [DllImport("user32")]
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);

        //解除注册热键的api
        [DllImport("user32")]
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

        private void Form1_Load(object sender, System.EventArgs e)
        {
            //注册热键 (窗体句柄,热键ID,辅助键,实键) 
            //辅助键说明: None = 0,   Alt = 1,  crtl= 2,  Shift = 4,   Windows = 8
            //如果有多个辅助键则,例如 alt+crtl是3 直接相加就可以了
            RegisterHotKey(this.Handle, 123, 2,  Keys.Q);
            RegisterHotKey(this.Handle, 456, 2, Keys.W);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            UnregisterHotKey(this.Handle, 123);
            UnregisterHotKey(this.Handle, 456);
        }

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0312:  //这个是window消息定义的注册的热键消息  
                    if (m.WParam.ToString() == "123")   // 按下CTRL+Q隐藏  
                    {
                        this.Hide();
                    }
                    else if (m.WParam.ToString() == "456") // 按下CTRL+W显示
                    {
                        this.Visible = true;
                    }
                    break;
            }
            base.WndProc(ref m);
        }


     对于注册热键,我们也可以这样利用:

        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);  
        }  

    参考:http://blog.csdn.net/YanMang/article/details/4246595

    上面的代码可以正确的设置 Ctrl + Shift + Alt + A, Ctrl + Shift + B,   Alt + C 这样的系统热键,但是我还不知道如何设置多个非功能键比如  Ctrl + Shift  + A + B,Shift + Alt + C + D +E 类似这样的,等待更新吧。
作者:flymorn
来源:flymorn
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Pinterest为何这样火? 图片瀑布流激发兴趣
下一篇:美国社交网站前10名:MeetMe进入前10,而Yelp则跌出前10
0条评论 “C#注册系统热键、全局快捷键方法”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号