• winform截取屏幕并发送邮件


    做了一个winform程序,可以手动截取整个屏幕,也可以自动定时截取屏幕,并发送到指定的邮箱。

    窗体界面如下:

    截取屏幕和发送邮件代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Net.Mail;
    using System.Net;
    
    namespace Snapshot
    {
        public class Common
        {
            /// <summary>
            /// 截图屏幕
            /// </summary>
            public static void ScreenSnapshot(string filepath)
            {
                Screen scr = Screen.PrimaryScreen;
                Rectangle rc = scr.Bounds;
                int iWidth = rc.Width;
                int iHeight = rc.Height;
                Image myImage = new Bitmap(iWidth, iHeight);
                Graphics g = Graphics.FromImage(myImage);
                g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
                myImage.Save(filepath);
            }
            /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="toAddress">收件人</param>
            /// <param name="mailSubject">邮件主题</param>
            /// <param name="mailBody">邮件内容</param>
            /// <param name="mailAttachList">附件路径</param>
            /// <returns></returns>
            public static bool SendMail(string toAddress, string mailSubject, string mailBody, List<string> mailAttachList)
            {
                MailAddress from = new MailAddress("xxx@163.com", "J.L.C"); //设置发件人信箱,及显示名字
                MailAddress to = new MailAddress(toAddress, "JLC");  //设置收件人信箱,及显示名字
                using (MailMessage oMail = new MailMessage(from, to))   //创建一个MailMessage对象
                {
                    oMail.Subject = mailSubject;      //邮件标题     
                    oMail.Body = mailBody;       //邮件内容
                    oMail.IsBodyHtml = true;            //指定邮件格式,支持HTML格式      
                    oMail.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//邮件采用的编码      
                    oMail.Priority = MailPriority.High;//设置邮件的优先级为高
    
                    foreach (string attach in mailAttachList)//附件路径
                        oMail.Attachments.Add(new Attachment(attach));
                    //发送邮件服务器
                    SmtpClient client = new SmtpClient();
                    client.Host = "smtp.163.com";    //指定邮件服务器
                    client.Credentials = new NetworkCredential("xxx@163.com", "xxx");//指定发件人邮箱,及密码
                    try
                    {
                        client.Send(oMail);  //发送邮件
                    }
                    catch
                    {
                        return false;
                    }
                }
                return true;
            }
        }
    }
    

     
    窗体中后台cs代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    
    namespace Snapshot
    {
        public partial class FrmSnapshot : Form
        {       
            System.Windows.Forms.Timer timer;
            public FrmSnapshot()
            {
                InitializeComponent();           
                this.Resize += new EventHandler(FormCopyScreen_Resize);
                notifyIcon1.ContextMenuStrip = contextMenuStrip1;
                toolStripMenuItemExit.MouseDown += new MouseEventHandler(toolStripMenuItemExit_MouseDown);
                toolStripStatusLabelTime.Text = DateTime.Now.ToString("yyyy-MM-dd");
                trackBar1.Minimum = 1;
                trackBar1.Maximum = 60;
                timer = new System.Windows.Forms.Timer();
                timer.Tick += new EventHandler(timer_Tick);           
            }
            /// <summary>
            /// 生成的图片文件名
            /// </summary>
            private string imgFile
            {
                get
                {
                    return DateTime.Now.ToString("yyyyMMdd_HHmmssfff") + ".jpg"; 
                }
            }
            /// <summary>
            /// 定时自动截取屏幕,并发邮件
            /// </summary>
            private void btnStart_Click(object sender, EventArgs e)
            {
                if (btnStart.Text == "执行")
                {
                    if (chkMin.Checked)               
                        HideForm();                   
                    
                    timer.Interval = 1000 * 60 * trackBar1.Value;
                    timer.Start();
                    btnStart.Text = "停止";
                    toolStripStatusLabelMsg.Text = string.Format("正在每隔{0}分,自动截图中...", trackBar1.Value);
                }
                else
                {
                    timer.Stop();
                    btnStart.Text = "执行";
                    toolStripStatusLabelMsg.Text = "";
                }
            }
    
            
            void SendMail(string img)
            {
                Common.SendMail("xxx@qq.com", "pic", "", new List<string>() { img });   
            }
    
            /// <summary>
            /// 手动截取屏幕
            /// </summary>
            private void btnCopyScreen_Click(object sender, EventArgs e)
            {
                HideForm();
                string img = imgFile;
                Common.ScreenSnapshot(img);            
                ShowForm();
                toolStripStatusLabelMsg.Text = "截图成功:" + img;
                //发邮件时间稍微久了点,窗体没反应,开一个线程执行
                Thread th = new Thread(delegate() { SendMail(img); });              
                th.Start();             
             }
    
            /// <summary>
            /// 定时执行
            /// </summary>
            private void timer_Tick(object sender, EventArgs e)
            {
                string img = imgFile;
                Common.ScreenSnapshot(img);
                Common.SendMail("xxx@qq.com", "pic", "", new List<string>() { img });            
            }
                  
            private void trackBar1_Scroll(object sender, EventArgs e)
            {
                lblValue.Text = trackBar1.Value.ToString();
            }
            /// <summary>
            /// 点击托盘图标显示窗体
            /// </summary>
            private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                ShowForm();
            }
            /// <summary>
            /// 托盘鼠标右键退出
            /// </summary>
            private void toolStripMenuItemExit_MouseDown(object sender, MouseEventArgs e)
            {
                Application.Exit();
            }
            private void FormCopyScreen_Resize(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    HideForm();
                }
            }
            /// <summary>
            /// 隐藏窗体
            /// </summary>
            private void HideForm()
            {
                this.Visible = false;
                this.WindowState = FormWindowState.Minimized;
                notifyIcon1.Visible = true;
            }
            /// <summary>
            /// 显示窗体
            /// </summary>
            private void ShowForm()
            {
                this.Visible = true;
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;
            }
        }
    }
    
  • 相关阅读:
    vuex
    JS判断浏览器类型和详细区分IE各版本浏览器
    javascript json对象操作(基本增删改查)
    react 使用antd 按需加载
    vue-cli 3.0 豆瓣api接口使用element做分页
    vue-cli 3.0 使用axios配置跨域访问豆瓣接口
    es6之扩展运算符 三个点(...)
    Vue.js——十分钟入门Vuex
    js数组的处理使用
    如何发布自己模块到NPM
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086976.html
Copyright © 2020-2023  润新知