欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#中设置快捷键

程序员文章站 2023-09-04 09:59:13
最近找了一些资料,是讲在c#中设置快捷键运行方法或程序的 要设置快捷键必须使用user32.dll下面的两个方法。 bool registerhotkey(  h...
最近找了一些资料,是讲在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);