当前位置: 首页 > 编程笔记 >

C#实现小截屏软件功能

闽高峯
2023-03-14
本文向大家介绍C#实现小截屏软件功能,包括了C#实现小截屏软件功能的使用技巧和注意事项,需要的朋友参考一下

第一次写博客,文笔较差,将就看吧

日常生活中会经常使用到截屏功能,使用最多的无非就是Windows自带的截图工具、QQ截图和PrintScreen键,但要达到截图到word或保存到文件,需要鼠标选择多次。比如我们想截图并将图插入到Word中,不需要保存图片,我们希望直接点击截图按钮,选择截图区域,Ctrl+V简单三步就行了(感觉说了好多废话),切入正题。

1.基本功能

选择屏幕区域后提醒你保存所截的图片,或直接将所截图片放到剪切板里(以便用Ctrl+V粘贴)。

2.界面设计

界面很简单,无非就是可实现以上功能的两个按钮和其他文字,见图:

界面的属性需要注意几个问题:

1)窗口设为固定大小,并禁用窗口最大化(因为我们不希望窗口大小会变)

2)窗口最好设为顶置

3)把两个文字label和两个按钮都放到一个panel里,以便于后面程序对控件属性的操作

4)那么大的按钮,最好改变一下它的样式,还可以设置背景为gif动图

3.功能实现

那么关键问题来了,怎么截图呢?见下图

原理其实很简单,就是在点击按钮后,窗口变为全屏覆盖在屏幕最上方,并变为半透明,使你能看到窗口下面的屏幕内容,然后拖动鼠标(此时其实是在软件的主窗口上拖动,这样就方便程序捕捉鼠标坐标了),根据坐标在屏幕上绘制选框,接着松开鼠标后,根据鼠标落下和松开的坐标,截取屏幕,最后保存或复制到剪切板。

4.敲代码吧

using System;
using System.Windows.Forms;
using System.Drawing;//绘图要用
using System.Threading;//延时函数要用

namespace 截屏
{
  public partial class Form1 : Form
  {
    bool mouseDown = false, havePainted = false;
    Point start, end;
    Point start1, end1;
    Size size = new Size(0, 0);
    bool saveFile = true;
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ReadyToCaptrue();
      saveFile = true;
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
      start = e.Location;
      mouseDown = true;
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
      if (size.Width != 0 && size.Height != 0)
      {
        ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
        havePainted = false;
      }
      end = e.Location;
      if (start.X > end.X)
      {
        int temp = end.X;
        end.X = start.X;
        start.X = temp;
      }

      if (start.Y > end.Y)
      {
        int temp = end.Y;
        end.Y = start.Y;
        start.Y = temp;
      }
      this.Opacity = 0.0;
      Thread.Sleep(200);
      if (end.X - start.X > 0 && end.Y - start.Y > 0)
      {
        Bitmap bit = new Bitmap(end.X - start.X, end.Y - start.Y);
        Graphics g = Graphics.FromImage(bit);
        g.CopyFromScreen(start, new Point(0, 0), bit.Size);
        if (saveFile)
        {
          SaveFileDialog saveFileDialog = new SaveFileDialog();
          saveFileDialog.Filter = "png|*.png|bmp|*.bmp|jpg|*.jpg|gif|*.gif";
          if (saveFileDialog.ShowDialog() != DialogResult.Cancel)
          {
            bit.Save(saveFileDialog.FileName);
          }
        }
        else
        {
          Clipboard.SetImage(bit);
        }
        g.Dispose();
      }
      this.WindowState = FormWindowState.Normal;
      this.FormBorderStyle = FormBorderStyle.FixedSingle;
      panel1.Visible = true;
      this.Opacity = 1;
      mouseDown = false;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
      if (mouseDown)
      {
        if (size.Width != 0 && size.Height != 0 && havePainted)
        {
          ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
        }
        end1 = e.Location;
        size.Width = Math.Abs(end1.X - start.X);
        size.Height = Math.Abs(end1.Y - start.Y);
        start1.X = (start.X > end1.X) ? end1.X : start.X;
        start1.Y = (start.Y > end1.Y) ? end1.Y : start.Y;

        if (size.Width != 0 && size.Height != 0)
        {
          ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
          havePainted = true;
        }
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      ReadyToCaptrue();
      saveFile = false;
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void ReadyToCaptrue()
    {
      this.Opacity = 0.1;
      panel1.Visible = false;
      this.FormBorderStyle = FormBorderStyle.None;
      this.WindowState = FormWindowState.Maximized;
    }
  }
}
 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍android截屏功能实现代码,包括了android截屏功能实现代码的使用技巧和注意事项,需要的朋友参考一下 android开发中通过View的getDrawingCache方法可以达到截屏的目的,只是缺少状态栏! 原始界面 截屏得到的图片 代码实现 1. 添加权限(AndroidManifest.xml文件里) 2. 添加1个Button(activity_main.xml文件)

  • 本文向大家介绍Python实现可自定义大小的截屏功能,包括了Python实现可自定义大小的截屏功能的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现可自定义大小的截屏功能。分享给大家供大家参考,具体如下: 蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小蛐蛐找到了他,说是想要一个可以截图工具。 大致需要做出这样的效果。 虽然已经很久不写Python代码了,但是没办法,盛

  • 本文向大家介绍android实现录屏小功能,包括了android实现录屏小功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android实现录屏小功能的具体代码,供大家参考,具体内容如下 思路 android实现录屏功能有两种方案,一种是直接使用android自带的MediaProjectionManager实现录屏功能,第二种是是只录语音,用户的操作通过某种方式进行记录保存,最

  • 本文向大家介绍Android实现的截屏小程序示例,包括了Android实现的截屏小程序示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现的截屏小程序。分享给大家供大家参考,具体如下: 先看截图,不过这个截屏还不够完整,头上的statusbar没有,呈黑色。 多按了几次,就成这样了,呵呵。 资源文件: 更多关于Android相关内容感兴趣的读者可查看本站专题:《Andro

  • 本文向大家介绍C# 实现QQ式截图功能实例代码,包括了C# 实现QQ式截图功能实例代码的使用技巧和注意事项,需要的朋友参考一下 这个功能一共有两部分组成,第一部分是窗体代码,另外的一部分是一个辅助方法。直接贴出代码,以供大家参考: 第二部分是辅助方法类  实现的效果如下:  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍VC实现屏幕截词功能的方法详解,包括了VC实现屏幕截词功能的方法详解的使用技巧和注意事项,需要的朋友参考一下 VC程序设计中屏幕上的文字大都是由gdi32.dll的以下几个函数显示的:TextOutA、TextOutW、ExtTextOutA、ExtTextOutW。实现屏幕抓词的关键就是截获对这些函数的调用,得到程序发给它们的参数。 实现的方法有以下三个步骤: 一、得到鼠标的当前位

  • 本文向大家介绍python定时截屏实现,包括了python定时截屏实现的使用技巧和注意事项,需要的朋友参考一下 写在前面 因为暂时还没有想好做什么具体的某个项目来提升对python的理解,所以就自己想着做一下小玩意来加强一下自己对一些库和方法的理解 分析 1、截屏 截屏的话有pillow这个模块,并且就两条语句,后面会看到 2、定时任务 定时的话涉及到时间,所以会引入time这个模块 3、保存 保

  • 本文向大家介绍VBS实现截图功能,包括了VBS实现截图功能的使用技巧和注意事项,需要的朋友参考一下 百度说,VBS很难截图,倒是有个利用第三方软件的方法,调用该软件,然后该软件会自动截图。 但这样,违背了用VBS的初衷。 用VBS就是因为它方便快捷。要是用第三方软件的话,干脆我们直接用VB写一个好了。 那么...只好调用Excel用VBA去做了。 有什么更好的方法吗? 在度娘上翻了很久,没有什么好