开发环境:VS2005, C#语言

为了给一个程序加一个系统级的热键,在开发时需要使用到下面的代码,就是在程序中注册和卸载热键。

1。首先在Form1类的函数中添加如下代码:

[DllImport("user32.dll")]
        private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);

[DllImport("user32.dll")]
        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

注意,使用上面的代码前,必须使用"using System.Runtime.InteropServices;"来引入命名空间。

2。在Form1的构造函数中注册热键:

public Form1()

{

RegisterHotKey(Handle, 100, 0, Keys.Escape);    //注册热键: Esc

}

3. 重写窗口的WndProc函数:

protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x312)
            {
                if (m.WParam.ToInt32() == 100)
                    this.Close();                                       //当按下Esc键时关闭本窗口
            }
            base.WndProc(ref m);
        }

4。在析构函数中卸载热键:

~Form1()

{

UnregisterHotKey(Handle, 100);                  //窗口未激活时卸载热键

}

这样就完成了我们的所有设置。但是这个添加的热键是系统级热键,也就是说不管这个窗口有没有被激活,这个热键都是能起作用的。

但是有时我们并不希望这种热键是系统级的,而是希望当前窗口被激活时,该热键才起作用,如果没有被激活,该热键不起作用。于是,我想了办法,就是更改热键注册和卸载的时间。

思路:在Form1的Form1_Activated事件中注册热键,在Form1_Deactivate中卸载热键,其他不变,代码如下:

private void Form1_Activated(object sender, EventArgs e)
        {
            RegisterHotKey(Handle, 100, 0, Keys.Escape);    //在窗口激活时注册热键: Esc
        }

private void Form1_Deactivate(object sender, EventArgs e)
        {
            UnregisterHotKey(Handle, 100);                  //窗口未激活时卸载热键           
        }

这样就达到了窗口级的热键。

根据同样的思路,你可以选择其他的时机来注册或卸载热键!

给窗口设置系统级或窗口级的热键相关推荐

  1. Android添加系统级顶层窗口 和 WindowManager添加view的动画问题

    当Dialog有编辑框时如果选择会弹菜单窗口就不要用 Context applicationContext = mainActivity.getApplicationContext(); AlertD ...

  2. RegisterHotKey设置系统级热键《转》

    BOOL   RegisterHotKey(      HWND   hWnd,         //响应该热键的窗口句柄      Int    id,           //该热键的唯一标识   ...

  3. win7计算机文件夹折叠,win7系统折叠组窗口设置不折叠的操作方法

    很多小伙伴都遇到过对win7系统折叠组窗口设置不折叠进行设置的困惑吧,一些朋友看过网上对win7系统折叠组窗口设置不折叠设置的零散处理方法,并没有完完全全明白win7系统折叠组窗口设置不折叠是如何设置 ...

  4. 最大化窗口设置_BetterTouchTool的几个实用设置

    调节屏幕色温 下载nshift(一个exec文件),并将其移动到 /usr/local/bin 中. Execute Terminal Command: /usr/local/bin/nshift 0 ...

  5. 《ANSYS Workbench有限元分析实例详解(静力学)》——第2章 ANSYS Workbench主界面设置2.1 窗口设置...

    本节书摘来自异步社区<ANSYS Workbench有限元分析实例详解(静力学)>一书中的第2章,第2.1节,作者: 周炬 , 苏金英 更多章节内容可以访问云栖社区"异步社区&q ...

  6. 计算机窗口还原,win8系统找回计算机窗口“回收站”的还原办法

    随着我们电脑上安装的程序越来越多就会出现win8系统找回计算机窗口"回收站"的情况,如果我们遇见win8系统找回计算机窗口"回收站"的问题只能想方设法解决它,用 ...

  7. 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

    文章目录 一.导入 OpenGL 的两个头文件 二.链接 OpenGL 库 三.将 Windows 桌面窗口改成 OpenGL 窗口 四.获取窗口设备 五.设置像素格式描述符 六.设置像素格式 七.创 ...

  8. Linux学习笔记(三):系统运行级与运行级的切换

    1.Linux系统与其他的操作系统不同,它设有运行级别.该运行级指定操作系统所处的状态.Linux系统在任何时候都运行于某个运行级上,且在不同的运行级上运行的程序和服务都不同,所要完成的工作和所要达到 ...

  9. vector 设置大小_BetterSnapTool for Mac(窗口设置工具) v1.9.3

    BetterSnapTool for mac版是一款在国内非常受欢迎的窗口管理软件,这款软件可以让你轻松调整桌面上窗口的大小和位置,你可以将其拖动到屏幕上的任何一个位置,这样可以让你像是用window ...

最新文章

  1. java获取date的时分秒_Java 之 Date 获取 年月日时分秒
  2. 使用Visual Studio 2008 进行远程调试
  3. vmware下/mnt/hgfs下为空的问题
  4. c语言程序设保安值班,保安值班系统
  5. Python3 爬虫学习笔记 C01 【基本库 urllib 的使用】
  6. pythonencode和decode_Python3的decode()与encode()
  7. chart.js x轴显示不全_机床大讲堂第67讲——基于FANUC系统的数控铣床增加第四轴的方法...
  8. mos 控制交流_小米智能排插的220V交流电压信号的开关控制电路设计
  9. php实现access数据库连接,PHP实现Access数据库连接
  10. 为什么同样是200M宽带,移动可以不要钱,联通却要1000多?
  11. web1:http协议简介和用netassist和py程序当http服务器
  12. 10个Excel VBA实例教程-刘欢-专题视频课程
  13. 基因组注释2. 非编码基因和编码基因预测tRNAScan-SE、rRNAmmer和Prodigal
  14. html设计渐变背景,HTML网页设计之div渐变背景色
  15. 2021计算机夏令营保研经历(中科院计算所,南京大学人工智能学院等)
  16. 便捷缴费 支付 (一)
  17. 俄罗斯方块游戏开发教程7:消除判断和处理
  18. ubuntu下安装Google谷歌浏览器(64位系统)
  19. OpenCV 2 计算机视觉编程手册
  20. Druid监控页面配置reset-enable的说明

热门文章

  1. 八皇后问题(回溯法)
  2. 高级Python:定义类时要应用的9种最佳做法
  3. 计算机公开课教学反思,语文公开课教学反思
  4. 数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多
  5. leetcode 493. 翻转对(分治算法)
  6. leetcode329. 矩阵中的最长递增路径(dfs)
  7. vuejs 轮播_如何在VueJS中设计和构建轮播功能
  8. 管理员所有权代码_为什么代码所有权糟透了,您永远不应该在有实践的地方工作...
  9. sublime text 3安装及使用
  10. Python学习笔记19(算法)