C#系统热键类
C#系統(tǒng)熱鍵類
using?System;
using?System.Runtime.InteropServices;
namespace?SystemHotKey
{
????public?delegate?void?HotkeyEventHandler(int?HotKeyID);
????public?class?Hotkey?:?System.Windows.Forms.IMessageFilter
????{
????????System.Collections.Hashtable?keyIDs?=?new?System.Collections.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;
????????????System.Windows.Forms.Application.AddMessageFilter(this);
????????}
????????public?int?RegisterHotkey(System.Windows.Forms.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()
????????{
????????????System.Windows.Forms.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;
????????}
????}
}
該類的使用方法:
在窗體的類中聲明一個(gè)變量
private?int?Hotkey1 在窗體的Load事件中加入如下代碼
Hotkey?hotkey;
hotkey?=?new?Hotkey(this.Handle);
Hotkey1?=?hotkey.RegisterHotkey(System.Windows.Forms.Keys.F1,?Hotkey.KeyFlags.MOD_CONTROL);//定義快鍵(Ctrl?+?F1)
hotkey.OnHotkey?+=?new?HotkeyEventHandler(OnHotkey); 添加快鍵調(diào)用函數(shù) public?void?OnHotkey(int?HotkeyID)
{
????if(HotkeyID?==?Hotkey1)
????{
????????if(this.Visible?==?true)
????????????this.Visible?=?false;
????????else
????????????this.Visible?=?true;
????}
????else
????{
????????this.Visible?=?false;
????}
}
using?System;
using?System.Runtime.InteropServices;
namespace?SystemHotKey
{
????public?delegate?void?HotkeyEventHandler(int?HotKeyID);
????public?class?Hotkey?:?System.Windows.Forms.IMessageFilter
????{
????????System.Collections.Hashtable?keyIDs?=?new?System.Collections.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;
????????????System.Windows.Forms.Application.AddMessageFilter(this);
????????}
????????public?int?RegisterHotkey(System.Windows.Forms.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()
????????{
????????????System.Windows.Forms.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;
????????}
????}
}
該類的使用方法:
在窗體的類中聲明一個(gè)變量
private?int?Hotkey1 在窗體的Load事件中加入如下代碼
Hotkey?hotkey;
hotkey?=?new?Hotkey(this.Handle);
Hotkey1?=?hotkey.RegisterHotkey(System.Windows.Forms.Keys.F1,?Hotkey.KeyFlags.MOD_CONTROL);//定義快鍵(Ctrl?+?F1)
hotkey.OnHotkey?+=?new?HotkeyEventHandler(OnHotkey); 添加快鍵調(diào)用函數(shù) public?void?OnHotkey(int?HotkeyID)
{
????if(HotkeyID?==?Hotkey1)
????{
????????if(this.Visible?==?true)
????????????this.Visible?=?false;
????????else
????????????this.Visible?=?true;
????}
????else
????{
????????this.Visible?=?false;
????}
}
轉(zhuǎn)載于:https://www.cnblogs.com/XingfuStar/archive/2006/02/14/330523.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 鱼子是什么?
- 下一篇: 低位缩量十字星意味着什么