动态为程序指定快捷键
为了提供更加好的用户体验,在windows Forms开发中,通常我们需要让用户可以自定义快捷键。我们知道在设计阶段指派快捷键是很容易的,但是如何让他们可以在运行时动态指定快捷键呢?
第一步:导入两个函数,分别是注册和取消注册快捷键
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TestHotKeys
{
class HotKeys
{
//如果函数执行成功,返回值不为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,
Ctrl = 2,
Shift = 4,
WindowsKey = 8
}
}
}
第二步:在窗体的初始化之后,注册快捷键
/// <summary>
/// 注册快捷键。这里的100,101,102是随便写的,只要不重复就可以
/// </summary>
private void RegisterHotKeys()
{
HotKeys.RegisterHotKey(Handle, 100, HotKeys.KeyModifiers.Shift, Keys.A);
HotKeys.RegisterHotKey(Handle, 101, HotKeys.KeyModifiers.Shift, Keys.B);
HotKeys.RegisterHotKey(Handle, 102, HotKeys.KeyModifiers.Shift, Keys.C);
}
第三步:编写一个特殊事件,让窗体能接收windows消息
/// <summary>
/// 响应窗体消息的事件
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY: {
switch (m.WParam.ToInt32())
{
case 100: { CallMethod("A"); break; }
case 101: { CallMethod("B"); break; }
case 102: { CallMethod("C"); break; }
default:
break;
}
break;
}
default:
break;
}
base.WndProc(ref m);
}
我们这里是为了演示目的,实现了一个简单的CallMethod方法,它就是显示一个消息而已
private void CallMethod(string input) {
MessageBox.Show(input);
}
最后,不要忘记在窗体关闭的时候,取消快捷键的注册
/// <summary>
/// 取消快捷键注册
/// </summary>
private void UnRegisterHotKeys()
{
HotKeys.UnregisterHotKey(Handle, 100);
HotKeys.UnregisterHotKey(Handle, 101);
HotKeys.UnregisterHotKey(Handle, 102);
}
动态为程序指定快捷键相关推荐
- 扫码普通二维码跳转微信小程序指定页面(体验服和开发服跳转链接不能动态传参)
好久不见,时隔多年我又来记录问题来了,记录这次问题的主要原因是减少你我去搜索资源的时间,下面开始讲讲我越到的问题.(下面说的是针对小程序体验版或者开发版哈,正式环境不存在这个问题) 需求:pc端扫码登 ...
- uni-app微信小程序生成自定义参数二维码,跳转小程序指定页面,获取参数;uni-app微信小程序获取二维码自定义参数;微信小程序生成动态参数二维码;uni-app微信小程序获取动态参数二维码;
一.场景需求: 在小程序个人名片页面A页面,生成用户的个人名片二维码(该二维码携带用户的唯一标识id):微信扫一扫或长按图片识别这个二维码,可以跳转到小程序的B页面,并且在B页面拿到二维码上的唯一标识 ...
- 应用程序自定义快捷键
版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8282065 ...
- 给黑莓程序添加快捷键
在集成开发环境中打开资源页,在Title属性中,开发者一般会在这里指定应用程序的名字.在名字中挑一个字母,然后在后面加上\u0332,这个字母就成了该应用程序的快捷键. 如果系统原来对这个字母定义了快 ...
- 小程序扫描普通链接二维码跳转小程序指定界面方法
微信官方文档扫普通链接二维码打开小程序 | 微信开放文档 看了官方文档之后,还是存在很多困惑,微信小程序是托管到微信服务器上的,要想扫描普通链接跳转指定界面,首先要知道微信把小程序放的服务器的访问路径 ...
- 28项全能版动态寄生虫程序-烟雨开发动态寄生虫安装控制面板-2022动态寄生虫程序-全网独家
28项全能版动态寄生虫程序-烟雨开发动态寄生虫安装控制面板-2022动态寄生虫程序-全网独家 动态寄生虫全自动采集伪原创7种新闻源,全自动统计轮链,多种后缀随机展示,关键词文章全局转码,文章随机内链. ...
- 该按钮可以重启计算机,win7指定快捷键和重启快捷键是什么
篇一:Windows7的关机快捷键和重启快捷键 Windows7的关机快捷键和重启快捷键是什么? 这个问题在软媒论坛里面问的还真比较多,早期操作系统如XP的关机快捷键是"Win键 U U&q ...
- ext js如何动态更改xtype_K8S ConfigMap 用于动态应用程序的实践
编辑:小君君 技术校对:星空下的文仔.bot 在 Kubernetes 中,ConfigMap 是允许管理员将配置组件与镜像内容解耦,使容器化应用程序产生可移植性的一种资源.ConfigMap 可以与 ...
- vue利用 vue-animate-number插件动态展示数字(从0动态滚动到指定数字)
vue利用 vue-animate-number插件动态展示数字(从0动态滚动到指定数字) 第一步:安装vue-animate-number插件 $ npm install vue-animate-n ...
最新文章
- 全排列算法的字典序排列
- node和npm版本更新
- Ilya Muromets(DP or 思维)
- 食堂外卖java源代码,基于jsp的饭堂外卖系统-JavaEE实现饭堂外卖系统 - java项目源码...
- C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041
- Thymeleaf前后端传值 页面取值与js取值
- 国产数据库助力民航核心交易系统
- HTTP Keep-Alive详解[转]
- rtlab matlab版本,电力电子技术教学中电力仿真软件选择与应用.doc
- 腾讯云短信服务详细教程
- hover和active的区别
- 标准的服务端返回Result封装及使用
- 科技大佬对人工智能的看法
- Mysql ESCAPE 用法
- Android版本与Linux内核版本的关系
- 米开朗基罗在他的画里,可是暗藏了不少'男男kiss'的镜头,要不要来了解下?
- 利用内容营销来推动长尾词SEO优化
- 05.视频播放器内核切换封装
- 魔方cfop公式软件_【入门】误区与方法篇(三阶魔方)
- uniapp点击时出现背景声音
热门文章
- Android 应用 之路 MPAndroidChart~ScatterChart
- websocket python爬虫_python实现基于websocket协议的网络爬虫
- python简单爬虫程序分析_[Python专题学习]-python开发简单爬虫
- Python matplotlib中文显示异常,导入simhei字体有误
- Mysql —— linux下使用c语言访问mySql数据库
- Spring源码窥探之:xxxAware接口
- LeetCode(30):与所有单词相关联的字串
- bzoj3993 [SDOI2015]星际战争
- POJ3272 Cow Traffic
- 晒加班晒熬夜……“晒勤奋”是一种病!