c#中设置快捷键

时间:2021-05-31 20:14:29 

最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的

要设置快捷键必须使用user32.dll下面的两个方法。

BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
); 



BOOL UnregisterHotKey(
HWND hWnd,
int id
); 
转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:

[DllImport("user32.dll", SetLastError=true)] 
public static extern bool RegisterHotKey(
IntPtr hWnd, // handle to window 
int id, // hot key identifier 
KeyModifiers fsModifiers, // key-modifier options 
Keys vk // virtual-key code 
); 

[DllImport("user32.dll", SetLastError=true)] 
public static extern bool UnregisterHotKey(
IntPtr hWnd, // handle to window 
int id // hot key identifier 
);

[Flags()] 
public enum KeyModifiers 

None = 0, 
Alt = 1, 
Control = 2, 
Shift = 4, 
Windows = 8 


这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。

于是有了:

private void Form1_Load(object sender, System.EventArgs e)
{
label2.AutoSize = true;

Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
RegisterHotKey(Handle, 100, 0, Keys.F10);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
UnregisterHotKey(Handle, 100);//卸载快捷键


那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?

那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:

protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = 0x0312;//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
ProcessHotkey();//调用主处理程序
break;
}
base.WndProc(ref m);

标签:c#中设置快捷键
0
投稿

猜你喜欢

  • Java详解实现多线程的四种方式总结

    2023-04-04 19:43:34
  • Java使用DualPivotQuicksort排序

    2022-05-22 20:58:12
  • Spring Security配置多个数据源并添加登录验证码的实例代码

    2022-11-19 13:49:26
  • C#实现Winform小数字键盘模拟器

    2021-08-29 12:34:25
  • Eclipse+Webservice简单开发实例

    2023-04-10 08:55:29
  • java shiro实现退出登陆清空缓存

    2023-06-18 16:10:39
  • C#如何安全、高效地玩转任何种类的内存之Span的本质

    2022-10-23 10:59:15
  • 深入理解spring事务

    2023-10-13 14:51:36
  • springBoot整合rabbitMQ的方法详解

    2022-08-19 02:28:33
  • SpringMVC之@requestBody的作用及说明

    2022-06-08 12:35:04
  • Android ListView的item背景色设置和item点击无响应的解决方法

    2021-07-30 11:26:16
  • java实现文件上传下载功能

    2021-11-26 17:19:05
  • 深入探讨Linux静态库与动态库的详解(一看就懂)

    2023-07-04 01:02:28
  • Unity3D中脚本的执行顺序和编译顺序

    2023-11-07 01:50:31
  • C#如何将DLL打包到程序中

    2022-08-06 13:18:57
  • Android Studio下载与安装简易教程

    2022-05-28 10:25:30
  • Android 数据存储方式有哪几种

    2023-12-10 17:20:16
  • Dubbo Consumer引用服务示例代码详解

    2022-04-26 03:56:44
  • C# 根据字符串生成二维码的实例代码

    2023-09-16 09:06:50
  • 深入解析Java中的Classloader的运行机制

    2023-07-16 11:47:59
  • asp之家 软件编程 m.aspxhome.com