C# Winform添加全局快捷键(老板键)
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace drmaple
{
class HotKey
{
//如果函数执行成功,返回值不为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 = ,
Alt = ,
Ctrl = ,
Shift = ,
WindowsKey =
}
}
} //简单说明一下:
//“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)以窗体FormA为例,介绍HotKey类的使用
//在FormA的Activate事件中注册热键,本例中注册Shift+S,Ctrl+Z,Alt+D这三个热键。这里的Id号可任意设置,但要保证不被重复。 private void Form_Activated(object sender, EventArgs e)
{
//注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
HotKey.RegisterHotKey(Handle, , HotKey.KeyModifiers.Shift, Keys.S);
//注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
HotKey.RegisterHotKey(Handle, , HotKey.KeyModifiers.Ctrl, Keys.B);
//注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
HotKey.RegisterHotKey(Handle, , HotKey.KeyModifiers.Alt, Keys.D);
}
//在FormA的Leave事件中注销热键。
private void FrmSale_Leave(object sender, EventArgs e)
{
//注销Id号为100的热键设定
HotKey.UnregisterHotKey(Handle, );
//注销Id号为101的热键设定
HotKey.UnregisterHotKey(Handle, );// http://ike.126.com
//注销Id号为102的热键设定
HotKey.UnregisterHotKey(Handle, );
} 重载FromA中的WndProc函数
///
/// 监视Windows消息
/// 重载WndProc方法,用于实现热键响应
///
///
protected override void WndProc(ref Message m)
{ const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case : //按下的是Shift+S
//此处填写快捷键响应代码
break;
case : //按下的是Ctrl+B
//此处填写快捷键响应代码
break;
case : //按下的是Alt+D
//此处填写快捷键响应代码
break;
}
break;
}
base.WndProc(ref m);
}
C# Winform添加全局快捷键(老板键)的更多相关文章
- win10 添加全局快捷键
前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...
- C#Winform 注册使用全局快捷键详解
C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...
- WPF之全局快捷键
目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...
- 在WPF中使用全局快捷键
今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了. static cl ...
- WPF设置全局快捷键
转自:http://www.cnblogs.com/atskyline/archive/2012/09/20/2694878.html 第一步 引入到Winows API 偷懒直接写在类里 1: [D ...
- 在 WinForms 项目中使用全局快捷键
借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Windows API 打交道.本文就交你如何使用 Win ...
- Delphi 中的全局快捷键+给指定窗体发送按键
[背景] 公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集.同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像.说干就干,一直想做全局快捷键了,网 ...
- C# 、winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示
C# .winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示 解决方法一:设置label的Tag属性值与skinEngine的DisableTag属性值相同即可.默认值是9 ...
- jenkins系列之添加全局配置(一)
第一步: 第二步:执行以下命令: 第三步:找到/c/Users/Administrator/.ssh 目录,里面有两个文件:id_rsa和id_rsa.pub 第四步:配置ssh[这里是id_rsa. ...
随机推荐
- ubuntu下 net core 安装web模板
---恢复内容开始--- 今天想试试在Linux用C#开发WebAPI,查了下,要用: dotnet new -t Web 来建立工程,结果我试了下,出来这段: Invalid input switc ...
- mac gcc develop
1:check version gcc -v / g++ -v 2:compile gcc *.c / g++ *.cpp outfile: a.out 3:excute ./a.out ...
- Elasticsearch的JavaAPI
获取客户端对象 public class App { private TransportClient client; //获取客户端对象 @Before public void getClinet() ...
- Ubuntu 16.04 fatal: Unable to find remote helper for 'https'
在Windows10 的Linux子系统下安装oh-my-zsh的时候出现如下错误: fatal: Unable to find remote helper for 'https' 网上有描述说没有安 ...
- Mac下如何用SSH连接远程Linux服务器,centos无法复制粘贴
CentOS 7.1安装完之后默认已经启动了ssh服务我们可以通过以下命令来查看ssh服务是否启动. 3.2查看22端口是否开放 #netstat -tnl 3.3查看ssh服务是否启动 #syste ...
- StanFord ML 笔记 第三部分
第三部分: 1.指数分布族 2.高斯分布--->>>最小二乘法 3.泊松分布--->>>线性回归 4.Softmax回归 指数分布族: 结合Ng的课程,在看这篇博文 ...
- oracle 表或视图不存在
导入导出时,会自动表名自动加上了““双引号需要将表名改一下就可以了 alter table "oldtablename" rename to newtableName;
- SAP work process Memory allocate
Memory allocation sequence to dialog work processes in SAP What is the memory allocation sequence to ...
- JAVA获取文件夹下所有的文件
package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; im ...
- python学习笔记_week21
note 上节内容回顾: 1.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? Form表单提交: 提交 -> url > 函数或类中的方法 - .. ...