博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WINFROM自定义热键
阅读量:7165 次
发布时间:2019-06-29

本文共 2430 字,大约阅读时间需要 8 分钟。

先定义一个热键类
 
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);
        
}
版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。 

  作      者:温景良
  文章出处:  或  

分类: 
       
0
0
上一篇:
下一篇:
posted @  2008-12-25 16:56   Views( 348) Comments( 2)   
  
 
2009-04-14 11:04 |   
好东西,讲的很清楚
  
 
2012-03-20 16:59 |   
学习下了!
最新IT新闻:
· 
· 
· 
· 
· 
» 
最新知识库文章:
· 
· 
· 
· 
· 
» 
本文转自

博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2008/12/25/1362437.html,如需转载请自行联系原作者
你可能感兴趣的文章
主账号删除后,查询应用时,无法翻页
查看>>
Android 4.4.4: java.lang.SecurityException: Package com.android.settings does not belong to 1001
查看>>
java中生成验证码,以及验证码的使用
查看>>
C#二维码
查看>>
创建包
查看>>
数据查询
查看>>
织梦list文章列表按权重排序
查看>>
DNS Prefetching
查看>>
hive基本操作与应用
查看>>
jquery : 代码中实现单击按钮的效果
查看>>
Beginning Windows Azure Development Guide
查看>>
【HDOJ】3068 最长回文
查看>>
Spring AOP中pointcut expression表达式解析 及匹配多个条件
查看>>
iOS 页面间传值 之 属性传值,代理传值
查看>>
vue2.X组件心得
查看>>
[Android Pro] How to get recent tasks on Android “L”?
查看>>
框架选择原因以及说明
查看>>
poj 2429 GCD & LCM Inverse
查看>>
漫谈聚类--网站
查看>>
原生js删除元素
查看>>