首页 > 开发 > 综合 > 正文

c#中设置快捷键

2024-07-21 02:26:39
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 要设置快捷键必须使用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);
    }


    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表