C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能

本文主要是介绍C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本实例全部文章目录

虽然添加了放大镜的功能,但是在进行像素级的定位时,还是不容易精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的。

处理键盘按下事件

        /// <summary>/// 处理键盘按下事件/// 用于实现以下功能:/// 当用户按下Esc键时,退出截图过程;/// Shift + Enter 开始截图的功能;/// 使用键盘的上下左右键调整截图位置的功能;/// Shift + 上下左右键调整截图区域大小的功能;/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Escape){ExitCutImage(true);// 如果不加这一句,热键只能在窗口隐藏后使用一次,之后就不起作用了。//RegisterHotKey(Handle, 100, 2 | 1, Keys.A);}if (e.Shift && e.KeyCode == Keys.Enter){if (!this.lbl_CutImage.Visible){this.isCuting = true;this.beginPoint = MousePosition;this.endPoint = MousePosition;SaveCutImageSize(MousePosition, MousePosition);UpdateCutInfoLabel(UpdateUIMode.ShowInfoBox | UpdateUIMode.ShowCutImage);}}if (e.KeyCode == Keys.Left){if (this.lbl_CutImage.Visible){if (e.Shift){if (this.cutImageRect.Width > 1){this.cutImageRect.Width -= 1;Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y);UpdateCutInfoLabel(UpdateUIMode.None);}}else{if (this.cutImageRect.Left > -1){this.cutImageRect.X -= 1;UpdateCutInfoLabel(UpdateUIMode.None);}}}else{if (Cursor.Position.X > -1){Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y);}}}if (e.KeyCode == Keys.Right){if (this.lbl_CutImage.Visible){if (e.Shift){if (this.cutImageRect.Right < this.Width + 1){this.cutImageRect.Width += 1;Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);UpdateCutInfoLabel(UpdateUIMode.None);}}else{if (this.cutImageRect.Right < this.Width + 1){this.cutImageRect.X += 1;UpdateCutInfoLabel(UpdateUIMode.None);}}}else{if (Cursor.Position.X < this.Width + 1){Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);}}}if (e.KeyCode == Keys.Up){if (this.lbl_CutImage.Visible){if (e.Shift){if (this.cutImageRect.Height > 1){this.cutImageRect.Height -= 1;Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1);UpdateCutInfoLabel(UpdateUIMode.None);}}else{if (this.cutImageRect.Top > -1){this.cutImageRect.Y -= 1;UpdateCutInfoLabel(UpdateUIMode.None);}}}else{if (Cursor.Position.Y > -1){Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1);}}}if (e.KeyCode == Keys.Down){if (this.lbl_CutImage.Visible){if (e.Shift){if (this.cutImageRect.Bottom < this.Height + 1){this.cutImageRect.Height += 1;Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1);UpdateCutInfoLabel(UpdateUIMode.None);}}else{if (this.cutImageRect.Bottom < this.Height + 1){this.cutImageRect.Y += 1;UpdateCutInfoLabel(UpdateUIMode.None);}}}else{if (Cursor.Position.Y < this.Height + 1){Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1);}}}}

处理键盘抬起事件

        /// <summary>/// 处理键盘抬起事件/// Shift + Enter 开始截图,当松开Shitf键后,/// 停止截图区域大小的设置,不然的话鼠标移动还会改变截取区域的大小;/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_KeyUp(object sender, KeyEventArgs e){if (e.KeyCode == Keys.ShiftKey){if (this.isCuting){this.isCuting = false;this.pictureBox_zoom.Hide();this.lastMouseMoveTime = 0;UpdateCutInfoLabel(UpdateUIMode.None);}}}

用键盘操作截图的功能说明:

按下截图快捷键(通常是:Ctrl + Shift + A)后,可以移动鼠标到大概的位置,然后就可以通过键盘的上下左右键精确移动鼠标的位置,在精确定位截图的位置后,就可以按下Shift 键再按 Enter键,Shift键不要松开,这时可以按上下左右键改变截图区域的大小,松开Shift键完成截图区域大小设置;

这时你可以通过上下左右键来改变截图区域的位置,按下Shift键不要松开,再按上下左右键可以改变截图区域的大小。

这篇关于C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846308

相关文章

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本