`
testcs_dn
  • 浏览: 113857 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现

    此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现,文章链接:http://blog.csdn.net/testcs_dn/article/details/23346683

    【源码】C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能

    此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能,文章链接:http://blog.csdn.net/testcs_dn/article/details/24466763

    C#软件开发实例.私人订制自己的屏幕截图工具中使用的光标文件

    在C#软件开发中,创建一个自定义的屏幕截图工具是一项常见的任务,它涉及到图形用户界面(GUI)的交互和图像处理技术。本实例重点讨论的是如何在这样的工具中使用自定义的光标文件,以提供更加个性化的用户体验。...

    ArcGIS Engine + C# 实例开发教程.pdf

    【ArcGIS Engine + C# 实例开发教程】是面向ArcGIS Engine初学者的一份详细教程,旨在帮助读者理解和掌握基于C#语言使用Visual Studio 2005开发GIS桌面应用程序的技术。教程的目标是使读者能够深入理解ArcGIS Engine...

    C#精彩实例教程.pdf

    C#精彩实例教程.pd 很好一本入门教程

    ArcGIS+Engine+C#实例开发教程.pdf

    ArcGIS+Engine+C#实例开发教程.pdf

    200个经典C#WinForm实例源码.rar

    《C# WinForm实例解析——200个经典...通过深入学习这200个经典实例,你将能够全面掌握C# WinForm开发,提升自己的编程技巧,为日后的项目开发打下坚实基础。每一个源码都是一个宝贵的教育资源,值得反复研读和实践。

    用C#写的屏幕截屏例子

    在本文中,我们将深入探讨如何使用C#编程语言实现屏幕截屏功能。...这个功能在许多应用程序中都有广泛的应用,例如屏幕录制、桌面辅助工具或者游戏截图软件。希望这个解释能帮助你理解和实现C#中的屏幕截屏。

    c# 模拟 屏幕键盘

    c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 ...

    C#实现截屏功能C#实现截屏功能C#实现截屏功能

    C#作为.NET Framework的主要开发语言,提供了丰富的API和类库,使得开发截屏工具变得相对简单。我们将从以下几个方面进行讨论: 1. **WinForms基础知识**:在C#中,我们可以使用WinForms库来创建桌面应用程序,它...

    C# 实现键盘j记录与日志实例.rar

    在IT领域,尤其是在软件开发中,日志记录是一项至关重要的任务。它可以帮助开发者跟踪和调试应用程序,记录用户行为,以及确保系统的稳定运行。本实例聚焦于C#编程语言中的键盘日志记录,这是一种用于捕获并存储用户...

    C#软件开发实例,谨供参考

    基于C#的软件开发实例,可供程序人员参考

    ArcGIS Engine+C#实例开发教程.rar

    《ArcGIS Engine+C#实例开发教程》是一份深入讲解如何使用ArcGIS Engine结合C#进行地理信息系统(GIS)开发的详细教程。ArcGIS Engine是Esri公司提供的一个强大的开发工具,它允许开发者创建桌面、移动和Web应用程序...

    C#通讯录实例...C#通讯录实例

    C#是一种功能强大的面向对象的编程语言,广泛应用于开发Windows桌面应用程序、Web应用程序以及游戏等。创建一个通讯录实例是学习C#基础知识和面向对象编程的绝佳实践。 1. **基础概念** - **类(Class)**:在C#中...

    C# 虚拟键盘 实例源码(系统操作)

    最后,如果虚拟键盘需要支持特殊功能,如复制、粘贴、撤销和重做,那么还需要掌握这些操作的实现原理,以及C#中如何调用系统剪贴板API进行数据交换。 在压缩包内的“虚拟键盘”文件中,你应该能找到实现以上功能的...

    C# 网络通信开发训练实例

    C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674...

    C#程序150实例.rar

    "贪吃蛇游戏"是一个经典的计算机游戏,它的实现涉及到了C#中的图形界面编程、键盘输入处理、数组操作、游戏逻辑等。这个实例对于学习游戏开发基础和提高逻辑思维能力十分有益。 "五子棋程序"则展示了如何在C#中实现...

    利用C#Winform实现区域截屏

    在本文中,我们将深入探讨如何使用C# Winform框架实现区域截屏功能。C#是一种广泛使用的编程语言,尤其在Windows应用开发中,Winform是一个强大的工具,它提供了丰富的控件和API,使得创建交互式桌面应用程序变得...

    c#软件开发实例,包括仓库,理财,房屋出租管理系统

    在C#软件开发领域,这三个实例——房屋出租管理系统、仓库管理信息系统和理财管理信息系统,都是典型的企业级应用案例,对于初学者来说是非常有价值的实践项目。这些实例覆盖了基础的数据库操作、用户界面设计以及...

Global site tag (gtag.js) - Google Analytics