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

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件