当前位置:  编程技术>.net/c#/asp.net

c#中设置快捷键

    来源: 互联网  发布时间:2014-10-13

    本文导语:  最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的 要设置快捷键必须使用user32.dll下面的两个方法。 BOOL RegisterHotKey(  HWND hWnd,  int id,  UINT fsModifiers,  UINT vk );    和 BOOL UnregisterHotKey(  HWND hWnd,  int id )...

最近找了一些资料,是讲在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);

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能
  • 如何在JBuilder中设置Classpath?
  • 为什么我在setup中设Firewall,怎么设都不起作用,永远停留在high上?
  • 请问如何在shell脚本中设置环境变量?
  • 如何在页面中设计菜单
  • gdb调试的问题(运行中设置断点)
  • ☆ 请教大虾,如何在jar文件中设置 main-class ☆
  • 在JB6 中能否设置代码编辑区全屏显示,如果能在哪一项中设置
  • asp.net在web.config和IIS中设置Session过期时间的方法
  • 在web.config中设置上传文件的最大大小
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能 iis7站长之家
  • 请问:应当如何在AUTOEXEC.Bat中设置?
  • Shell编程中如何获取环境变量中设置的路径
  • 如何在vbscript脚本中设置JSP中的变量?
  • 如何从SERVLET中设置参数,在JSP中获得???
  • jdk开发中设置系统环境变量有什么用?
  • 如何在makefile中设置并读取环境变量
  • dbx中设置断点的问题?请高手指教
  • 如何在程序中设置系统时间?
  • 在局域网中设置Linux时间服务器
  • emacs中设置花括号对齐的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3