实现目的:按住某组合键时,窗体隐藏或显示,本教程代码为完整代码,直接复制即可使用,
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);
- }
- }
- }
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
文章评论 本文章有个评论