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/
关注 - 32
粉丝 - 161
» 下一篇: 多参数sp_executesql
http://pic.cnblogs.com/face/u323842.png?id=22224153
【推荐】腾讯云新用户域名抢购1元起,抓紧抢购
· 精准率首次超过人类!阿里巴巴机器阅读理解打破世界纪录
· 技术帖:每天被今日头条推送文章 背后的算法技术是什么?
· 支付宝实体版老黄历问世:全球限量1000册
· 趣店被蚂蚁金服送上纽交所,现在是时候该独立了
· 蚂蚁宝卡升级:支付宝/微博即将免流
» 更多新闻...
· 以操作系统的角度述说线程与进程
· 软件测试转型之路
· 门内门外看招聘
· 大道至简,职场上做人做事做管理
» 更多知识库文章...
公告
WINFROM自定义热键相关推荐
- 制作加密狗程序_【火腿DIY】用于SDR应用程序的自定义热键键盘 | 视障人士的选择...
Christoph用于SDR应用程序的自制自定义热键键盘 上周,我在SDRplay 社交页面上看到了Christoph Jahn的精彩文章. 克里斯托夫(Christoph)制作了一个与SDRuno一 ...
- Eclipse快捷键大全 ,及自定义热键
快捷键 功能 Ctrl+1 快速修复 Ctrl+D 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行 ...
- ad19pcb设置恢复默认_3D设计软件ZBrush 2019如何设置自定义热键
在ZBrush 2019 for Mac中,您可以指定自定义热键以适合您的特定工作方法.在本篇文章中,我们就来介绍一下ZBrush 2019 for Mac如何设置自定义热键. ZBrush 2019 ...
- AutoHotkey —— 自定义热键编辑软件(设置Typora字体颜色快捷键应用)
一.安装 AutoHotkey 官方安装链接:https://autohotkey.com/download/ahk-install.exe [home]Tab页:选择[Custom lnstalla ...
- 工具-Ditto与X mouse Button,自定义热键复制粘贴Ctrl C /V,解放双手
文章目录 1.使用演示 2.使用方法 3.更新,鼠标一键实现复制粘贴 3.1 使用方法 1.使用演示 不需要同时摁下ctrl c /v 就可以在键盘上实现一键复制粘贴,其实去网上有外接的键盘,大概20 ...
- 远程注入dll中注册热键
函数原型如下 BOOL RegisterHotKey( HWND hWnd, // handle to window int id, // hot key identifier UINT fsModi ...
- 复制粘贴Ctrl+C改为自定义单键
文章目录 那一瞬间不想用Ctrl+C了 (一)搜索渠道 关键词搜索 (二)方案对比 (三)最终方案Ditto 使用方法 (四)案例 1. 替换Ctrl+C快捷键: 2. 将英文小写替换为大写: 那一瞬 ...
- PyCharm如何自定义调整字体大小的快捷键
在PyCharm的中文界面中,如何自定义热键,调整代码编辑界面的字体大小. 进入PyCharm>文件>设置>键盘映射 在键盘映射界面内的搜索框,搜索"字体"> ...
- c# 自定义多个SplitContainer 支持点击放大缩小
设计起因:最近在做winfrom自定义打印工具,其中项目中需要为打印界面分四个区 于是想到了splitcontainer,由于是在tabcontrol中放入splitcontainer,所以做成自定义 ...
最新文章
- 互联网老师论坛高调炫耀收入:硕士毕业三年,月入九万多!
- 零下273.14度稳定运行!中科院自主研发稀释制冷机,高端科研仪器取得突破进展...
- MySQL DTAETIME、TIMESTAMP、DATE、TIME、YEAR(日期和时间类型)
- linux下安装java环境(ubuntu和centos)
- IOS开发之手势—UIGestureRecognizer 共存
- 软件可靠性指标mtbf测试评估,软件可靠性评估.pdf
- Java 的发展(历史)轨迹和历史变迁
- 区分两种题目类型中的数学期望
- 职场见闻录(01) - 怎样回答这两个问题?
- SQLSERVER 创建ODBC 报错的解决办法 SQLState:‘01000‘的解决方案
- Oracle sql给一列赋值,简单的Oracle变量SQL赋值
- 洛谷4755 Beautiful Pair (分治)
- AFNetworking到底做了什么?(二)
- SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解——跟着开涛学SpringMVC...
- 单体架构与微服务架构(英文)
- josn 格式 解析
- 101 Ruby Code Factoids
- 为什么Flutter是跨平台开发的终极之选
- Linux进程信号——信号的产生
- 解决vs2019 16.5版本中 编译虚幻4c++ bool值报错问题