C# 快捷键 打开窗口

C#user32.dll内嵌方法使用详解 Console.WriteLine("子窗口句柄: " + childWindowHandle);Console.WriteLine("窗口标题文本长度: " + titleLength);Console.WriteLine("窗口句柄: " + windowHandle);Console.WriteLine("未找到窗口句柄");// 调用 EnumChildWindows 函数来获取指定窗口的所有子窗口句柄。// 调用 EnumChildWindows 函数来枚举指定父窗口的所有子窗口。 阅读详情
 在应用中,我们可能会需要实现像Ctrl+C复制、Ctrl+V粘贴这样的快捷键,本文简单介绍了它的实现,并给出了一个实现类。



简单说明一下:
“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{}”定义了一组枚举,将辅助键的数字代码直接表示为文字,以方便使用。这样在调用时我们不必记住每一个辅

助键的代码而只需直接选择其名称即可。




(1)建立一个类文件,命名为HotKey.cs,代码如下:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace KoalaStudio.BookshopManager
{
    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 = 0,
            Alt = 1,
            Ctrl = 2,
            Shift = 4,
            WindowsKey = 8
        }
    }
}





(2)以窗体FormA为例,介绍HotKey类的使用

在FormA的Activate事件中注册热键,本例中注册Shift+S,Ctrl+Z,Alt+D这三个热键。这里的Id号可任意设置,但要保证不被重复。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace KoalaStudio.BookshopManager
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form_Activated(object sender, EventArgs e)
        {
            //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
            HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
            //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
            HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
            //注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
            HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
        }

        private void FrmSale_Leave(object sender, EventArgs e)
        {
            //注销Id号为100的热键设定
            HotKey.UnregisterHotKey(Handle, 100);
            //注销Id号为101的热键设定
            HotKey.UnregisterHotKey(Handle, 101);
            //注销Id号为102的热键设定
            HotKey.UnregisterHotKey(Handle, 102);
        }

        ///
        /// 监视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 100: //按下的是Shift+S
                            //此处填写快捷键响应代码  
                            this.WindowState = FormWindowState.Normal;
                            this.Show();
                            break;
                        case 101: //按下的是Ctrl+B
                            //此处填写快捷键响应代码
                            break;
                        case 102: //按下的是Alt+D
                            //此处填写快捷键响应代码
                            break;
                    }
                    break;
            }
            base.WndProc(ref m);
        }
    }
}
完成代码后,我们在窗体中按下Shift+S、Ctrl+B、Alt+D这三组快捷键中的任意一组时,程序都会做出响应的反应。
C# 实现自定义快捷键设置 通过这个功能,用户可以更改应用程序中的快捷键,以适应他们的个人偏好和习惯。首先,我们需要创建一个新的 Windows Forms 应用程序项目,并添加所需的用户界面元素,如文本框和按钮。在该方法中,我们首先检查用户按下的快捷键是否在字典中,如果是,则执行与之关联的操作。用户可以在应用程序中更改快捷键,并在按下相应的快捷键时执行与之关联的操作。在构造函数中,我们初始化了一些默认的快捷键和操作,你可以根据实际需求添加更多的快捷键。最后,你可以在按钮的点击事件处理程序中获取用户输入的快捷键,并将其更新到。 阅读详情

相关推荐

玩转快捷键热词速写 Windows

在使用 Windows 操作系统时,熟练掌握快捷键可以大大提高工作效率。快捷键是一组键盘上的按键组合,可以触发特定的操作或命令。本文将介绍一些常用的 Windows 快捷键,并提供相应的源代码示例。上述示例代码涵盖了一些常用的 Windows 快捷键,并提供了相应的源代码供参考。熟练掌握这些快捷键可以帮助你更高效地使用 Windows 操作系统。希望这篇文章对你有所帮助!

MwDart的博客 99

C#实现快捷键(系统热键)响应

 C#实现快捷键(系统热键)响应在应用中,我们可能会需要实现像Ctrl+C复制、Ctrl+V粘贴这样的快捷键,本文简单介绍了它的实现,并给出了一个实现类。http://ike.126.com(1)建立一个类文件,命名为HotKey.cs,代码如下:using System;using System.Collections.Generic;using System.Runtime.Int

净心编程 2015

C# WinForm中实现快捷键自定义设置实例

本文源码下载:http://xiazai.jb51.net/201501/tools/cs-key-setting.rar 项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中。 最终的效果如下图所示: 核心代码如下所示: 复制代码 代码如下: private void keyDown(object sender, KeyEventArgs e) {     StringBuilder keyValue = new StringBuilder();     keyValue.Lengt

SendMessage用法

函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。该函数是应用程序和应用程序之间进行消息传递的主要手段之一。函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);参数:hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADC...

javahigh1 2050

drm 之modes

#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&...

u012794472的专栏 3718

保姆级教程:用Python脚本一键把选股结果导入通达信自选股(附完整代码)

本文提供了一份详细的Python自动化教程,教你如何将选股结果一键导入通达信自选股。通过解析通达信文件结构、编写Python脚本实现股票代码转换和批量导入,大幅提升量化交易效率。教程包含完整代码示例,特别适合使用通达信(TDX)的投资者和量化交易开发者。

weixin_30915951的博客 359

C#.NET的界面编程--实例1:简单的按键事件

C#.NET的界面编程--实例1:简单的按键事件

m0_72676510的博客 3437

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 940

c# 打开的窗口显示在最前面_新手必收藏 最全面mac系统快捷键大全详细介绍 常用快捷键大全...

mac系统快捷键大全详细介绍(全部)对于使用苹果电脑的操作系统的新人来说,快捷键是个很麻烦的问题,要一个个的找到快捷键也不是很容易的问题,今天这篇文章就解决了到处找快捷键的麻烦。第一种分类:启用快捷键按下按键或组合键,直到所需的功能出现(例如,在启动过程中按住 Option 直到出现“启动管理程序”,或按住 Shift 直到出现“安全启动”)。提示:如果启动功能未起作用,而您使用的是第三方键盘,请...

weixin_39842029的博客 359

西门子828D/840DSL数控机床产量数据采集实战:一个C#程序员的踩坑与填坑记录

本文详细记录了C#程序员在西门子828D/840DSL数控机床产量数据采集实战中的经验与教训。从硬件连接到软件配置,再到数据读取与异常处理,文章分享了工业现场编程的特殊挑战和解决方案,特别是针对数控系统的TCP/IP通信、PLC变量地址映射及数据解析等关键技术点。

weixin_42741930的博客 596

JetLinks社区版VS企业版:手把手教你用PostgreSQL+Redis搭建物联网中台(Win7实测)

本文详细对比了JetLinks社区版与企业版的核心差异,并提供了在Windows 7系统上,使用PostgreSQL和Redis搭建物联网中台的完整部署教程。文章深入解析了从环境准备、后端服务构建到前端部署的每一步,为开发者在资源有限环境下构建高性价比物联网平台提供了清晰的实战指南。

w1x2y3的博客 305

C# WinForm登录窗口原理代码 分享

1,运行代码:staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//Application.Run(newForm1());...

weixin_30752377的博客 118

【CANdelaStudio编辑CDD】-2.2-给$27服务SecurityAccess创建一个SecurityLevel安全级别并修改SecurityAccess安全访问状态机(UDS诊断)

前一篇: 【UDS诊断描述文件CDD】-2.1-ISO_14229中$27服务理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/120392660 案例背景: 在CDD中如何给$27服务创建一个新的SecurityLevel安全级别; 在CDD中如何给$27服务修改SecurityAccess安全访问状态机。 1 查看$27服务中已有的SecurityLevel安全级别 2 查看$27服务中已有的SecurityAccess安全...

「汽车电子助手」的博客 4642

C#控制其它程序

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", Ent...

weixin_30627341的博客 179

MTK Meta ISP 工具使用技巧与参数读取路径全解析

在联发科(MediaTek, MTK)平台上进行相机图像调试时,Meta ISP 工具是连接 PC 与设备进行参数调整、寄存器读取和图像输出的重要工具。本文以实战角度出发,系统梳理 Meta ISP 的使用流程、关键模块功能、典型调试技巧与参数读取路径,结合最新版平台(如MTK Genio/Dimensity 系列)架构,帮助工程师掌握联发科图像调优的核心流程。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1148

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 338

C#程序注销、重启、关机和锁定电脑

一:截图 二:源代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using...

dianpi2993的博客 192

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C#中Winform开发主菜单及下拉菜单自定义动加载及事件处理后窗口自动加载

/ToolStripMenuItem fileMenu = new ToolStripMenuItem("产品基础数据库(&M)");foreach (ToolStripItem temp in item.DropDownItems)//循环主菜单下的子菜单。foreach (ToolStripMenuItem item in menus)//循环主菜单。newItem.Text = "一级二类菜单(&C)";/// 顶部菜单点击事件处理,并加载窗口数据。/// 主菜单控件初始化【二级】并绑定事件。

KenBest的专栏 480

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#实现自动发送QQ消息

1、得打开需要发送的聊天窗口,最小化也可,聊天时不能是中文输入法2、然后AIO名就是窗口左上角的那个名称,括号和QQ号不要,那个名称可能是好友备注,群名称,讨论组名称等。3、发送消息要设置成按Enter键发送4、想发图片要先把图片添加到表情,设置快捷键,而后把快捷键输入到消息内容中即可 代码: using System; using System.Windows.For...

weixin_30878361的博客 2275

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C#作业二——记事本

C#作业二——记事本 一、程序设计题:使用C#窗体应用实现记事本 二、功能说明 实现了记事本的主要功能,如下。 ​ (1)文件:新建、保存、打开、另存为和退出; ​ (2)编辑:撤销、复制、剪切、粘贴、全选以及日期; ​ (3)格式:自动换行、设置字体; ​ (4)查看:状态栏显示; ​ (5)帮助:关于记事本。 其中部分操作实现了快捷键以及工具栏图标操作。点击关于记事本会跳出一个新窗口供用户操作。 三、核心代码 主窗口: public partial class frmNotepad : Fo

m0_52229959的博客 618

C#快捷键

C#中的快捷键,可以更方便的编写代码 CTRL + SHIFT + B 生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O 打开项目 CTRL + SHIFT + C 显示类视图窗口 F4 显示属性窗口 SHIFT + F4 显示项目属性窗口 CTRL + SHIFT + E 显示资源视图 F12 转到定义 CTRL + F12 转到声明 CT...

weixin_42221136的博客 580

Visual Studio 使用及调试必知必会

作者:Luminji 转自:http://www.cnblogs.com/luminji/p/3287728.html 一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2:打开所在的文件夹 右键单击任何一个文件选项卡, 选择"打开所在的文件夹",或在 Solution

老瓦的笔记本 526
上一篇: Sql Server 内存释放
下一篇: sql server 备份清除历史文件作业
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值