zoukankan      html  css  js  c++  java
  • 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);
    }
    }
    } 
  • 相关阅读:
    python 格式化打印
    微软开发工具包下载
    win7 Adobe flash player 无法在线更新
    MySQL5.7本地首次登录win10报错修改
    MySQL本地登录及数据库导入导出
    03蓝桥杯特训课笔记总结:
    03第八届蓝桥杯省赛真题- 2.等差素数列
    02填空题
    01蓝桥杯第七届 方格填数(dfs)
    63中国剩余定理
  • 原文地址:https://www.cnblogs.com/bennylam/p/1669710.html
Copyright © 2011-2022 走看看