通过C#编写一个简易的Windows截屏增强工具

一、前言

在本篇攻略中,我们将详细讲解如何使用C#编写一个简易的Windows截屏增强工具。该工具可以实现采集屏幕截图、标注图片、保存图片等功能,为用户提供更加便捷的截屏体验。

二、环境准备

在开始编写代码前,我们需要准备如下环境:
- Windows操作系统
- Visual Studio 2019开发环境
- .NET Framework 4.7.2运行库

三、代码实现

  1. 创建窗体

在Visual Studio中新建一个Windows窗体工程,并在窗体中添加一个PictureBox和一个Button控件,如下图所示:

private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button1;

private void InitializeComponent()
{
    this.pictureBox1 = new System.Windows.Forms.PictureBox();
    this.button1 = new System.Windows.Forms.Button();
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
    this.SuspendLayout();
    // 
    // pictureBox1
    // 
    this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.pictureBox1.Location = new System.Drawing.Point(12, 12);
    this.pictureBox1.Name = "pictureBox1";
    this.pictureBox1.Size = new System.Drawing.Size(500, 300);
    this.pictureBox1.TabIndex = 0;
    this.pictureBox1.TabStop = false;
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(12, 318);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 1;
    this.button1.Text = "截屏";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(528, 353);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.pictureBox1);
    this.Name = "Form1";
    this.Text = "截屏增强工具";
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
    this.ResumeLayout(false);

}
  1. 实现截屏功能

在button1的Click事件中,我们可以实现截屏功能。

private void button1_Click(object sender, EventArgs e)
{
    // 隐藏窗口
    this.Hide();

    // 截屏
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Graphics graphics = Graphics.FromImage(bitmap);
    graphics.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);

    // 显示截屏图片
    pictureBox1.Image = bitmap;

    // 显示窗口
    this.Show();
}
  1. 实现图片标注功能

在pictureBox1的MouseMove事件中,我们可以实现图片标注功能。我们在PictureBox中实现一个画笔,并通过鼠标在PictureBox中的移动,来实现画线、画点等操作。

private Point p1, p2;

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (p1.IsEmpty)
            p1 = e.Location;
        else
        {
            p2 = e.Location;
            using (Graphics g = Graphics.FromImage(pictureBox1.Image))
            {
                g.DrawLine(Pens.Red, p1, p2);
            }
            pictureBox1.Invalidate();
            p1 = p2;
        }
    }
    else
        p1 = Point.Empty;
}
  1. 实现图片保存功能

在button1的Click事件中,我们可以实现图片保存功能。首先判断pictureBox1.Image是否为null,如果是,则提示用户进行截屏操作;如果不是,则弹出SaveFileDialog,让用户选择保存文件的位置和文件名。用户选择保存后,将pictureBox1.Image保存至指定位置。

private void button1_Click(object sender, EventArgs e)
{
    if (pictureBox1.Image == null)
    {
        MessageBox.Show("请先进行截屏操作");
        return;
    }

    SaveFileDialog dialog = new SaveFileDialog();
    dialog.Filter = "图片文件|*.png";

    if (dialog.ShowDialog() == DialogResult.OK)
    {
        pictureBox1.Image.Save(dialog.FileName);
        MessageBox.Show("保存成功");
    }
}

四、示例演示

  1. 实现截屏功能

点击“截屏”按钮,可以进行截屏操作。截屏后,截屏图片会显示在窗体中的PictureBox中。

  1. 实现图片标注功能

在截屏图片中,移动鼠标并按下鼠标左键不放,可以在截屏图片上画线。如下图所示:

  1. 实现保存功能

点击“保存”按钮,弹出保存对话框,用户选择保存的文件位置和文件名后,点击“保存”按钮即可将截屏图片保存至指定位置。如下图所示:

五、总结

通过以上演示,我们完成了一个简易的Windows截屏增强工具。在实现过程中,我们学习了如何采集屏幕截图、标注图片、保存图片等功能。这对于提高工作效率和便捷使用Windows操作系统,具有重要的意义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过C#编写一个简易的Windows截屏增强工具 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Question:基于C#连续赋值的面试题(解答)

    以下是对“Question:基于C#连续赋值的面试题(解答)”的完整攻略。 问题描述 这个问题描述如下: int i = 1; i = i++ + ++i; 问题解析 这道题主要考察的是 C# 连续赋值的知识点和自增运算符的使用。 连续赋值 先解释一下什么是连续赋值。连续赋值就是我们在一行语句中多次对一个变量进行赋值操作,如下所示: int i; i = 1…

    C# 2023年6月7日
    00
  • 12个Visual Studio调试效率技巧(小结)

    12个Visual Studio调试效率技巧(小结) Visual Studio是开发人员常用的IDE之一,它提供了丰富的功能和工具来帮助我们更快、更准确地开发和调试代码。在这篇文章中,我向大家分享了12个Visual Studio调试效率技巧,让我们在调试代码时更加高效。 技巧1:使用断点条件 有时候,我们只想在特定情况下停止代码的执行,这时我们可以使用断…

    C# 2023年6月3日
    00
  • C#导入导出EXCEL文件的代码实例

    对于C#导入导出EXCEL文件的代码实例,以下是详细的攻略及示例说明: 1. 导出Excel文件 1.1 引用必要的命名空间 using System.IO; using System.Data; using System.Reflection; using System.Runtime.InteropServices; using Microsoft.Of…

    C# 2023年6月1日
    00
  • 输出的文本实现对齐的方法(超简单)

    概述: 实现文本输出对齐的方法有很多,其中最简单的方法就是使用Markdown语法中的制表符\t。制表符\t可以在文本中插入一个制表符,从而实现对齐。 步骤: 1、在需要对齐的文本中,使用制表符\t进行对齐。制表符\t的作用就是让文本输出一个制表符的位置,从而实现对齐。 2、在Markdown语法中,需要使用代码块(反引号)将代码块包含起来。代码块中的内容会…

    C# 2023年6月7日
    00
  • C# Path.GetDirectoryName – 获取路径中的目录部分

    Path.GetDirectoryName是C#中一个静态方法,用于获取文件路径的目录名。 方法签名 public static string GetDirectoryName(string path); 参数说明 path:要获取目录名的文件路径(包括文件名或文件夹名)。 返回值说明 如果成功获取到目录名,返回目录名字符串,否则返回null。 使用方法 示…

    C# 2023年4月19日
    00
  • C#引用类型和值类型的适用场合和区别

    在C#中,变量可以是值类型或引用类型。值类型存储在栈中,而引用类型存储在堆中。在本文中,我们将介绍值类型和引用类型的适用场合和区别,并提供两个示例说明。 值类型 值类型是指存储在栈中的数据类型,例如int、float、double、bool等。值类型的变量直接包含其值,因此在传递值类型的变量时,将复制其值。这意味着对变量的更改不会影响原始值。 适用场合 值类…

    C# 2023年5月17日
    00
  • C#中的预处理器指令详解

    下面是关于“C#中的预处理器指令详解”的完整攻略: 什么是预处理器指令 预处理器指令是C#源代码中的特殊指令,用来告诉编译器在编译代码之前执行一些特殊操作。预处理指令以#号开头,可以出现在任何位置。 预处理指令类型 C#中有以下10种预处理指令: define:用于定义符号常量。 if、#elif、#else、#endif:用于条件编译。 warning:用…

    C# 2023年5月14日
    00
  • C# Split函数根据特定分隔符分割字符串的操作

    C#中的Split函数可以帮助我们快速地根据指定的分隔符将字符串分成若干段。下面是这个操作的完整攻略: 1. 确定要分割的字符串 首先,需要确定要分割的字符串的内容。可以直接从用户的输入中获取,也可以在程序中事先写好。 例如,我们有一个字符串需要分割: string str = "hello,world"; 2. 定义分隔符 接下来,需要…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部