C#设置热键(快捷键)实现隐藏和显示窗体的方法--杨麻子

实现目的:按住某组合键时,窗体隐藏或显示,本教程代码为完整代码,直接复制即可使用,

1、创建一个类,类名命名为 Hotkey 在类中写入如下代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Collections;
    namespace WindowsFormsApplication1
    {
        public delegate void HotkeyEventHandler(int HotKeyID);
        public class Hotkey : System.Windows.Forms.IMessageFilter
        {
            Hashtable keyIDs = new Hashtable();
            IntPtr hWnd;
            static public int Hotkey1;
            public event HotkeyEventHandler OnHotkey;
            public enum KeyFlags
            {
                MOD_ALT = 0x1,
                MOD_CONTROL = 0x2,
                MOD_SHIFT = 0x4,
                MOD_WIN = 0x8
            }
            [DllImport("user32.dll")]
            public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
            [DllImport("user32.dll")]
            public static extern UInt32 UnregisterHotKey(IntPtr hWnd, UInt32 id);
            [DllImport("kernel32.dll")]
            public static extern UInt32 GlobalAddAtom(String lpString);
            [DllImport("kernel32.dll")]
            public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom);
            public Hotkey(IntPtr hWnd)
            {
                this.hWnd = hWnd;
                Application.AddMessageFilter(this);
            }
            public int RegisterHotkey(Keys Key, KeyFlags keyflags)
            {
                UInt32 hotkeyid = GlobalAddAtom(System.Guid.NewGuid().ToString());
                RegisterHotKey((IntPtr)hWnd, hotkeyid, (UInt32)keyflags, (UInt32)Key);
                keyIDs.Add(hotkeyid, hotkeyid);
                return (int)hotkeyid;
            }
            public void UnregisterHotkeys()
            {
                Application.RemoveMessageFilter(this);
                foreach (UInt32 key in keyIDs.Values)
                {
                    UnregisterHotKey(hWnd, key);
                    GlobalDeleteAtom(key);
                }
            }
            public bool PreFilterMessage(ref System.Windows.Forms.Message m)
            {
                if (m.Msg == 0x312)
                {
                    if (OnHotkey != null)
                    {
                        foreach (UInt32 key in keyIDs.Values)
                        {
                            if ((UInt32)m.WParam == key)
                            {
                                OnHotkey((int)m.WParam);
                                return true;
                            }
                        }
                    }
                }
                return false;
            }
        }
    }

2、在窗体中创建过程,并在加载时间中写入代码,完整代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public void OnHotkey(int HotkeyID) //alt+z隐藏窗体,再按显示窗体。
            {
                if (HotkeyID == Hotkey.Hotkey1)
                {
                    if (this.Visible == true)
                        this.Visible = false;
                    else
                        this.Visible = true;
                }
                else
                {
                    this.Visible = false;
                }
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                Hotkey hotkey;
                hotkey = new Hotkey(this.Handle);
                Hotkey.Hotkey1 = hotkey.RegisterHotkey(System.Windows.Forms.Keys.Z, Hotkey.KeyFlags.MOD_ALT);   //定义快键(alt+z)
                hotkey.OnHotkey += new HotkeyEventHandler(OnHotkey);
            }
        }
    }

blog.tag.gg 技术小学生博客

未经允许不得转载:技术小学生 » C#设置热键(快捷键)实现隐藏和显示窗体的方法

猜你喜欢

转载自blog.csdn.net/yangermazi/article/details/81220691