900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Winform 多组合老板键Alt_Ctrl_Shift

Winform 多组合老板键Alt_Ctrl_Shift

时间:2022-12-14 20:37:11

相关推荐

Winform 多组合老板键Alt_Ctrl_Shift

某天,为了给微博粉丝精灵增加个老板键功能,找一惯的方式,开始从网络下手寻找: 关键字类似”C# 老板键“,一搜,一堆又一堆,然而出来的代码,基本上都是一个样的:

正常来说,老板键一般少不了:Alt+Ctrl+Shift+XX这种多组合方式,然而各类代码就是不直接说明,也没个提示,看来是有意隐藏,终于,还是被我发现其中的一些不为人知的隐藏属性:

下面看一下本人修改自网络常见的代码:publicdelegatevoidHotkeyEventHandler(intHotKeyID);

publicclassSystemHotKey:System.Windows.Forms.IMessageFilter

{

List<UInt32>keyIDs=newList<UInt32>();

IntPtrhWnd;

publiceventHotkeyEventHandlerOnHotkey;

publicenumKeyFlags

{

Alt=0x1,

Ctrl=0x2,

Shift=0x4,

Win=0x8,

//组合键等于值相加

Alt_Ctrl=0x3,

Alt_Shift=0x5,

Ctrl_Shift=0x6,

Alt_Ctrl_Shift=0x7

}

[DllImport("user32.dll")]

publicstaticexternUInt32RegisterHotKey(IntPtrhWnd,UInt32id,UInt32fsModifiers,UInt32vk);

[DllImport("user32.dll")]

publicstaticexternUInt32UnregisterHotKey(IntPtrhWnd,UInt32id);

[DllImport("kernel32.dll")]

publicstaticexternUInt32GlobalAddAtom(StringlpString);

[DllImport("kernel32.dll")]

publicstaticexternUInt32GlobalDeleteAtom(UInt32nAtom);

publicSystemHotKey(IntPtrhWnd)

{

this.hWnd=hWnd;

}

publicintRegisterHotkey(KeyFlagskeyflags,System.Windows.Forms.KeysKey)

{

System.Windows.Forms.Application.AddMessageFilter(this);

UInt32hotkeyid=GlobalAddAtom(System.Guid.NewGuid().ToString());

RegisterHotKey((IntPtr)hWnd,hotkeyid,(UInt32)keyflags,(UInt32)Key);

keyIDs.Add(hotkeyid);

return(int)hotkeyid;

}

publicvoidUnregisterHotkeys()

{

if(keyIDs.Count>0)

{

System.Windows.Forms.Application.RemoveMessageFilter(this);

foreach(UInt32keyinkeyIDs)

{

UnregisterHotKey(hWnd,key);

GlobalDeleteAtom(key);

}

keyIDs.Clear();

}

}

publicboolPreFilterMessage(refSystem.Windows.Forms.Messagem)

{

if(m.Msg==0x312)

{

if(OnHotkey!=null)

{

foreach(UInt32keyinkeyIDs)

{

if((UInt32)m.WParam==key)

{

OnHotkey((int)m.WParam);

returntrue;

}

}

}

}

returnfalse;

}

}

以上有几个要点说一下:

1:System.Windows.Forms.Application.AddMessageFilter(this);这句需要对应System.Windows.Forms.Application.RemoveMessageFilter(this);这里用完要记得取消。由于原来的程序,只在构造函数里添加,所以取消后,再设置就会失效了,这里直接在注册的时候给加上,取消时去掉,注意下这个效果即可。

2:热键的组合:

//组合键等于值相加Alt_Ctrl = 0x3,Alt_Shift = 0x5,Ctrl_Shift = 0x6,Alt_Ctrl_Shift = 0x7这个是不经意思发觉的,网上的代码都没有提到,估计转的人太多了,知道的又不写出来。3:把Hastable变更成List<Unint32>方式。

最近事比较多,写文都比较简单了,大伙见谅了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。