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

本文主要是介绍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/846307

相关文章

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach