• 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);
            }
  • 相关阅读:
    fiddler无法抓取360浏览器包的问题
    腾讯云服务器上发送邮件连接超时(无法发送)的相关问题
    jQuery获取后台动态添加上去的选择器
    NOIP 模拟 $84; m 宝藏$
    NOIP 模拟 $83; m 铺设道路$
    NOIP 模拟 $83; m 传统艺能$
    NOIP 模拟 $83; m 时代的眼泪$
    NOIP 模拟 $83; m 树上的数$
    NOIP 模拟 $80; m 百鸽笼$
    NOIP 模拟 $80; m 滑稽树下你和我$
  • 原文地址:https://www.cnblogs.com/mengxingxinqing/p/3790093.html
Copyright © 2020-2023  润新知