• C# 全局快捷键代码


    网上好不容易找到的资料

    已经测试通过了

    等明天再研究。

    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 HotKey1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    public delegate void HotkeyEventHandler(int HotKeyID);
    private int Hotkey1;
    public class Hotkey : System.Windows.Forms.IMessageFilter
    {
    Hashtable keyIDs = new Hashtable();
    IntPtr hWnd; 
    
    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;
    }
    } 
    
    public void OnHotkey(int HotkeyID) //Ctrl+F2隐藏窗体,再按显示窗体。
    {
    if (HotkeyID == 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);
    Hotkey1 = hotkey.RegisterHotkey(System.Windows.Forms.Keys.F2, Hotkey.KeyFlags.MOD_CONTROL); //定义快键(Ctrl + F2)
    hotkey.OnHotkey += new HotkeyEventHandler(OnHotkey);
    }
    }
    } 
  • 相关阅读:
    arcgis增大缩放级别
    arcgis地图窗口操作
    arcgis访问百度地图
    内存溢出和内存泄漏的区别、产生原因以及解决方案
    多线程之sleep和wait的区别
    java技术-重点方向
    技术思维VS管理思维
    几个问题
    写完百行代码,一次运行全部案例通过 是什么体验?
    分布式开放消息系统(RocketMQ)的原理与实践
  • 原文地址:https://www.cnblogs.com/bennylam/p/1669710.html
Copyright © 2020-2023  润新知