当前位置: 移动技术网 > IT编程>开发语言>c# > c#中设置快捷键

c#中设置快捷键

2019年07月18日  | 移动技术网IT编程  | 我要评论
最近找了一些资料,是讲在c#中设置快捷键运行方法或程序的

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

bool registerhotkey(
 hwnd hwnd,
 int id,
 uint fsmodifiers,
 uint vk
); 

  和

bool unregisterhotkey(
 hwnd hwnd,
 int id
); 
转换成c#代码,那么首先就要引用命名空间system.runtime.interopservices;来加载非托管类user32.dll。于是有了:

[dllimport("user32.dll", setlasterror=true)] 
public static extern bool registerhotkey(
 intptr hwnd, // handle to window 
 int id, // hot key identifier 
 keymodifiers fsmodifiers, // key-modifier options 
 keys vk // virtual-key code 
); 

[dllimport("user32.dll", setlasterror=true)] 
public static extern bool unregisterhotkey(
 intptr hwnd, // handle to window 
 int id // hot key identifier 
);


[flags()] 
public enum keymodifiers 

 none = 0, 
 alt = 1, 
 control = 2, 
 shift = 4, 
 windows = 8 


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

  于是有了:

private void form1_load(object sender, system.eventargs e)
{
 label2.autosize = true;

 clipboard.clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
 registerhotkey(handle, 100, 0, keys.f10);
}

private void form1_formclosing(object sender, formclosingeventargs e)
{
 unregisterhotkey(handle, 100);//卸载快捷键


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

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

protected override void wndproc(ref message m)//监视windows消息
{
 const int wm_hotkey = 0x0312;//按快捷键
 switch (m.msg)
 {
  case wm_hotkey:
   processhotkey();//调用主处理程序
   break;
 }
 base.wndproc(ref m);

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网