• 注册系统热键


    /// <summary>
            /// Defines a system-wide hot key.
            /// </summary>
            /// <param name="hWnd">A handle to the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.</param>
            /// <param name="id">The identifier of the hot key. If the hWnd parameter is NULL, then the hot key is associated with the current thread rather than with a particular window. If a hot key already exists with the same hWnd and id parameters, see Remarks for the action taken.</param>
            /// <param name="fsModifiers">The keys that must be pressed in combination with the key specified by the uVirtKey parameter in order to generate the WM_HOTKEY message. The fsModifiers parameter can be a combination of the following values.</param>
            /// <param name="vk">The virtual-key code of the hot key</param>
            /// <returns>If the function succeeds, the return value is nonzero.</returns>
            [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            public static extern bool RegisterHotKey(IntPtr hWnd, int id, Modifiers fsModifiers, Keys vk);//注册函数
            /// <summary>
            /// Frees a hot key previously registered by the calling thread.
            /// </summary>
            /// <param name="hWnd">A handle to the window associated with the hot key to be freed. This parameter should be NULL if the hot key is not associated with a window.</param>
            /// <param name="id">The identifier of the hot key to be freed.</param>
            /// <returns></returns>
            [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            public static extern bool UnregisterHotKey(IntPtr hWnd, int id);//接触注册函数
            public const int WM_HOTKEY = 0x0312;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnUnregister_Click(object sender, EventArgs e)
            {
                UnregisterHotKey(this.Handle, 8080);  //8080:热键的标志id   
            }
            private void btnRegister_Click(object sender, EventArgs e)
            {
                RegisterHotKey(this.Handle, 8080, Modifiers.MOD_CONTROL, Keys.C);  //8080:热键的标志id    2:crtl   A: C 
            }
            protected override void WndProc(ref Message m)
            { 
                switch (m.Msg)
                {
                    case WM_HOTKEY:    //window消息定义的註冊的热键消息 
                        if (m.WParam.Equals((IntPtr)8080))
                            MessageBox.Show("你按了ctrl+C");
                        break;
                }
                base.WndProc(ref m);
            }
        }
    
        public enum Modifiers : uint
        {
            /// <summary>
            /// Either ALT key must be held down.
            /// </summary>
            MOD_ALT = 0x0001,
            /// <summary>
            /// Either CTRL key must be held down.
            /// </summary>
            MOD_CONTROL = 0x0002,
            /// <summary>
            /// Changes the hotkey behavior so that the keyboard auto-repeat does not yield multiple hotkey notifications.
            /// Windows Vista and Windows XP/2000:  This flag is not supported.
            /// </summary>
            MOD_NOREPEAT = 0x4000,
            /// <summary>
            /// Either SHIFT key must be held down.
            /// </summary>
            MOD_SHIFT = 0x0004,
            /// <summary>
            /// Either WINDOWS key was held down. These keys are labeled with the Windows logo. Keyboard shortcuts that involve the WINDOWS key are reserved for use by the operating system.
            /// </summary>
            MOD_WIN = 0x0008
        }
  • 相关阅读:
    java内存模型
    如何保证消费者接收消息的顺序
    mysql事务隔离级别
    mysql加锁读
    mysql一致性读
    InnoDB锁
    JDK1.8中的线程池
    JDK1.8中HashMap实现
    物品推荐(基于物品的协同过滤算法)
    CRM 2013 生成自动编号
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/4235390.html
Copyright © 2020-2023  润新知