zoukankan      html  css  js  c++  java
  • C# 系统热键 PHP

    C#中没有设置系统热键的方法,需要调用系统API来实现。

    在网上找了段代码,自己实践了一下很好用,记录下来以方便以后使用。

    HotKey类代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    public class Hotkey : IMessageFilter
    {
        public delegate void HotkeyEventHandler(int HotKeyID);
        public event HotkeyEventHandler OnHotkey;
        private Hashtable keyIDs = new Hashtable();
        private IntPtr hWnd;
    
        /// <summary>
        /// 辅助按键
        /// </summary>
        public enum KeyFlags
        {
            MOD_NULL = 0x0,
            MOD_ALT = 0x1,
            MOD_CONTROL = 0x2,
            MOD_SHIFT = 0x4,
            MOD_WIN = 0x8
        }
    
        /// <summary>
        /// 注册热键API
        /// </summary>
        [DllImport("user32.dll")]
        public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
    
        /// <summary>
        /// 注销热键API
        /// </summary>
        [DllImport("user32.dll")]
        public static extern UInt32 UnregisterHotKey(IntPtr hWnd, UInt32 id);
    
        /// <summary>
        /// 全局原子表添加原子
        /// </summary>
        [DllImport("kernel32.dll")]
        public static extern UInt32 GlobalAddAtom(String lpString);
    
        /// <summary>
        /// 全局原子表删除原子
        /// </summary>
        [DllImport("kernel32.dll")]
        public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom);
    
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="hWnd">当前句柄</param>
        public Hotkey(IntPtr hWnd)
        {
            this.hWnd = hWnd;
            Application.AddMessageFilter(this);
        }
    
        /// <summary>
        /// 注册热键
        /// </summary>
        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;
        }
    
        /// <summary>
        /// 注销所有热键
        /// </summary>
        public void UnregisterHotkeys()
        {
            Application.RemoveMessageFilter(this);
            foreach (UInt32 key in keyIDs.Values)
            {
                UnregisterHotKey(hWnd, key);
                GlobalDeleteAtom(key);
            }
        }
    
        /// <summary>
        /// 消息筛选
        /// </summary>
        public bool PreFilterMessage(ref 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;
        }
    }
    
    调用方法:

    private Hotkey hotkey;
    private int hotKey_Ctrl_F2;
    private void btnHotKey_Click(object sender, EventArgs e)
    {
    	if (btnHotKey.Text == "注册热键")
    	{
    		hotkey = new Hotkey(this.Handle);
    		//定义热键(Ctrl + F2)
    		hotKey_Ctrl_F2 = hotkey.RegisterHotkey(System.Windows.Forms.Keys.F2, Hotkey.KeyFlags.MOD_CONTROL);
    		hotkey.OnHotkey += new Hotkey.HotkeyEventHandler(OnHotkey);
    		btnHotKey.Text = "注销热键";
    	}
    	else
    	{
    		hotkey.UnregisterHotkeys();
    		btnHotKey.Text = "注册热键";
    	}
    }
    
    private void OnHotkey(int HotkeyID)
    {
    	if (HotkeyID == hotKey_Ctrl_F2)
    	{
    		this.WindowState = FormWindowState.Normal;
    		this.Focus();
    		MessageBox.Show("Ctrl+F2");
    	}
    }
    

    实例下载:https://files.cnblogs.com/zjfree/HotKey.rar

    运行环境:WIN2003 + VS2005


    欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]
  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/zjfree/p/1938991.html
Copyright © 2011-2022 走看看