WINFROM自定义热键

简介:
?
先定义一个热键类
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace ExcelReportDesigner
{
     class WinHotKey
     {
         public WinHotKey()
         {
 
         }
         //如果函数执行成功,返回值不为0。       
         //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
         [DllImport( "user32.dll" , SetLastError = true )]
         public static extern bool RegisterHotKey(
               IntPtr hWnd,  //要定义热键的窗口的句柄
               int id, //定义热键ID(不能与其它ID重复)
               KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
               Keys vk //定义热键的内容
               );
 
         [DllImport( "user32.dll" , SetLastError = true )]
         public static extern bool UnregisterHotKey(
               IntPtr hWnd, //要取消热键的窗口的句柄
               int id   //要取消热键的ID
               );
         //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
         [Flags()]
         public enum KeyModifiers
         {
             None = 0,
             Alt = 1,
             Control = 2,
             Shift = 4,
             Windows = 8
         }
     }
}
/*
  * 简单说明一下:“public static extern bool RegisterHotKey()”这个函数用于注册热键。由于这个函数需要引用user32.dll动态链接库后才能使用,
  * 并且user32.dll是非托管代码,不能用命名空间的方式直接引用,所以需要用“DllImport”进行引入后才能使用。
  * 于是在函数前面需要加上“[DllImport("user32.dll", SetLastError = true)]”这行语句。
  * “public static extern bool UnregisterHotKey()”这个函数用于注销热键,同理也需要用DllImport引用user32.dll后才能使用。
  * “public enum KeyModifiers{}”定义了一组枚举,将辅助键的数字代码直接表示为文字,以方便使用。
  * 这样在调用时我们不必记住每一个辅助键的代码而只需直接选择其名称即可。
  */
 
  
 
2使用方法:
 
  private void frmMain_Load( object sender, EventArgs e)
         {
 
    //注册热键Ctrl+S,Id号为100。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
             WinHotKey.RegisterHotKey(Handle, 100, WinHotKey.KeyModifiers.Control, Keys.S);
 
}
 
   private void frmSpreadsheet_FormClosing( object sender, FormClosingEventArgs e)
         {
             WinHotKey.UnregisterHotKey(Handle, 100);
         }
 
需要在使用的From重写WndProc方法
 
   protected override void WndProc( ref Message msg)
         {
             const int WM_HOTKEY = 0x0312;    //按快捷键    
             if (msg.Msg == WM_HOTKEY)
             {
                 switch (msg.WParam.ToInt32())
                 {
                     case 100:    //按下的是Shift+S                    
                         try
                         {
                             axSpreadsheet.Export(filePath, SheetExportActionEnum.ssExportActionNone,
                                   SheetExportFormat.ssExportAsAppropriate);
                         }
                         catch (Exception ex)
                         {
                             MessageBox.Show( "保存失败!" , "错误提示!" , MessageBoxButtons.OK, MessageBoxIcon.Error);
                         }
                         break ;
                     case 101:    //按下的是Ctrl+B                                
                         break ;
                     case 102:    //按下的是Alt+D                                    
                         break ;
                 }
             }
             base .WndProc( ref msg);
         }
版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
  作      者:温景良
  文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

分类: WinForm
0
0
« 上一篇: Spreadsheet 对象
» 下一篇: 多参数sp_executesql
posted @ 2008-12-25 16:56 温景良(Jason) Views( 347) Comments( 2) Edit 收藏

  
#1楼 2009-04-14 11:04 | 千龙  
好东西,讲的很清楚

  
#2楼 2012-03-20 16:59 | 李志权  
学习下了!

相关文章
|
7月前
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
114 0
|
5月前
|
开发框架 前端开发 JavaScript
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
Qt自定义界面类并提升(提升的窗口部件)
Qt自定义界面类并提升(提升的窗口部件)
1377 0
Qt自定义界面类并提升(提升的窗口部件)
|
测试技术
MFC中为菜单或按钮添加快捷键功能
1、新建一快捷键资源,ACCELERATOR,关联相应的ID号,下图所示中,其中,第一个ID为自定义快捷键ID,按CTRL+R,此时响应该ID以应的消息响应函数, 第二个ID为菜单ID,此时按CTRL+V,调出ID_NETWORK_PING菜单对应的响应函数。
1378 0
|
C# Windows
wpf 屏蔽热键
原文:wpf 屏蔽热键 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a771948524/article/details/9428923   using System; using System.
1100 0
应用程序自定义快捷键
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82820654 ...
1074 0