首页 > 代码库 > winform接收全局的快捷键
winform接收全局的快捷键
public class NativeWIN32 { public NativeWIN32() { } /* ------- using WIN32 Windows API in a C# application ------- */ [DllImport("user32.dll", CharSet = CharSet.Auto)] static public extern IntPtr GetForegroundWindow(); // [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct STRINGBUFFER { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szText; } [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_CLOSE = 0xF060; public delegate bool EnumThreadProc(IntPtr hwnd, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern bool EnumThreadWindows(int threadId, EnumThreadProc pfnEnum, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr next, string sClassName, IntPtr sWindowTitle); /* ------- using HOTKEYs in a C# application ------- in form load : bool success = RegisterHotKey(Handle, 100, KeyModifiers.Control | KeyModifiers.Shift, Keys.J); in form closing : UnregisterHotKey(Handle, 100); protected override void WndProc( ref Message m ) { const int WM_HOTKEY = 0x0312; switch(m.Msg) { case WM_HOTKEY: MessageBox.Show("Hotkey pressed"); break; } base.WndProc(ref m ); } ------- using HOTKEYs in a C# application ------- */ [DllImport("user32.dll", SetLastError = true)] public static extern bool RegisterHotKey(IntPtr hWnd, // handle to window int id, // hot key identifier KeyModifiers fsModifiers, // key-modifier options Keys vk // virtual-key code ); [DllImport("user32.dll", SetLastError = true)] public static extern bool UnregisterHotKey(IntPtr hWnd, // handle to window int id // hot key identifier ); [Flags()] public enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 } }
在Form中Load事件中首先注册热键
/// <summary> /// 注册热键 /// </summary> /// <param name="c">按键</param> /// <param name="bCtrl">是否需要ctrl</param> /// <param name="bShift">是否需要shift</param> /// <param name="bAlt">是否需要alt</param> /// <param name="bWindows">是否需要win</param> public void SetHotKey(Keys c, bool bCtrl, bool bShift, bool bAlt, bool bWindows) { //先赋到变量 Keys m_key = c; bool m_ctrlhotkey = bCtrl; bool m_shifthotkey = bShift; bool m_althotkey = bAlt; bool m_winhotkey = bWindows; //注册系统热键 NativeWIN32.KeyModifiers modifiers = NativeWIN32.KeyModifiers.None; if (bCtrl) modifiers |= NativeWIN32.KeyModifiers.Control; if (bShift) modifiers |= NativeWIN32.KeyModifiers.Shift; if (bAlt) modifiers |= NativeWIN32.KeyModifiers.Alt; if (bWindows) modifiers |= NativeWIN32.KeyModifiers.Windows; NativeWIN32.RegisterHotKey(Handle, 100, modifiers, c); }
然后监听消息,处理事件
/// <summary> /// 重写windows消息响应 /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { const int wmHotkey = 0x0312; switch (m.Msg) { case wmHotkey: WindowMax(); break; } base.WndProc(ref m); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。