c#中设置快捷键

时间:2021-05-20

最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的

要设置快捷键必须使用user32.dll下面的两个方法。

BOOLRegisterHotKey(
 HWNDhWnd,
 intid,
 UINTfsModifiers,
 UINTvk
);

  和

BOOLUnregisterHotKey(
 HWNDhWnd,
 intid
);
转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:

[DllImport("user32.dll",SetLastError=true)]
publicstaticexternboolRegisterHotKey(
 IntPtrhWnd,//handletowindow
 intid,//hotkeyidentifier
 KeyModifiersfsModifiers,//key-modifieroptions
 Keysvk//virtual-keycode
);

[DllImport("user32.dll",SetLastError=true)]
publicstaticexternboolUnregisterHotKey(
 IntPtrhWnd,//handletowindow
 intid//hotkeyidentifier
);


[Flags()]
publicenumKeyModifiers
{
 None=0,
 Alt=1,
 Control=2,
 Shift=4,
 Windows=8
}

  这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。

  于是有了:

privatevoidForm1_Load(objectsender,System.EventArgse)
{
 label2.AutoSize=true;

 Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
 RegisterHotKey(Handle,100,0,Keys.F10);
}

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)
{
 UnregisterHotKey(Handle,100);//卸载快捷键
}

  那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?

  那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:

protectedoverridevoidWndProc(refMessagem)//监视Windows消息
{
 constintWM_HOTKEY=0x0312;//按快捷键
 switch(m.Msg)
 {
  caseWM_HOTKEY:
   ProcessHotkey();//调用主处理程序
   break;
 }
 base.WndProc(refm);
}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章