万恶的剪贴板==》为存储而生

备用地址:https://github.com/dunitian/DNTLive/tree/master/Software/万恶剪贴板

学生习题草稿

源码:https://github.com/dunitian/DNTLive/tree/master/Software/万恶剪贴板

回到家仔细二次想,仿佛并从未学到什么东西,又貌似又有一小点两样的感觉。张开笔记,下面壹多个词却又值得您去回想、思索半天,再深远一些回想,开掘幕后又隐藏了一片消息森林,想尝尝再去仔细领会下,却越开掘自个儿疲惫,最后无力回天地从一大堆谜云抽身出来,猛然察觉,看山已不是山,两日接近是10年…

贴代码:

实在,那二日有两句话让作者记念较深:一句是Blues老师说的,“作者灭亡你,与您毫不相关”的行业超越者可怕,互连网的“颠覆者”更多,人们原本的学识本事也已跟不上互连网变化的韵律,所以持续学习,并有收获输出,那才是竞争力!

于是乎就有了罪恶的剪贴板==》为存款和储蓄而生

末端,偶然在网络看到Blues老师一篇有关“青菜泥节”的稿子较感兴趣,于是起初搜寻了下Blues老师的材料、文章,并关注了她的微信公众号,偶尔也会专注一下她在起源大学课程的配置,但并未相当的大的实际行动。

要弄个什么还要把word里面包车型客车图样大概互连网的图片先弄出来,那是何等的蛋疼呀~

学员习题

  

源点大学sz151114期“产品首席推行官实战备磨练练营”

近几天逆天日常大批量复制粘贴一些图像和文字新闻,在少数特定的场合,图片都以无力回天直接粘贴进去的,就比如新浪的编辑器。

直至12月份,作者决然从工作两年多的商场辞职了。大概是跻身了所谓的毕业三年迷茫期吧,整个人陷入壹种“不抱残守缺,却不知怎么转移”思疑,辞职后依旧未有化解,于是回家待了七个月。五个月就干了两件事:壹、把驾驶执照考了;二、终于有时光贯彻带爸妈出完旅游的愿望,然后依旧滚回费城上班了…

实际上是个很简短的意义点==》稍微说下核心代码

对于产品老板的认知,作者只好认可本人是三个小白。纵然从事互连网行当三年多,混过不少近乎产品100、人人都以成品首席营业官的网站论坛,也找过一些摄像、公众号、PPT、书籍精晓,然并卵,依然依旧停留在最初“看山照旧山”的原点,再多的自嗨也达不到一场真正的高潮。

using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Net;
using System.Drawing.Imaging;

namespace 剪贴板
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 获取文本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnTxt_Click(object sender, EventArgs e)
        {
            var dataStr = Clipboard.GetText();
            if (!string.IsNullOrEmpty(dataStr))
            {
                CreateDirectory("Text");
                string name = string.Format(@"Text\{0}.txt", GetNewName());
                File.WriteAllText(name, dataStr, Encoding.UTF8);
                MessageBox.Show(string.Format("操作成功,请看Text文件夹!", "逆天友情提醒"));
                OpenDirectory();
            }
            else
            {
                MessageBox.Show("剪贴板文本内容为空!", "逆天友情提醒");
            }
        }

        /// <summary>
        /// 生成页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPage_Click(object sender, EventArgs e)
        {
            var dataStr = GetHtmlStr();
            if (!string.IsNullOrEmpty(dataStr))
            {
                MessageBox.Show("操作成功,请看打开的页面!", "逆天友情提醒");
                OutputHtml(dataStr);
            }
            else
            {
                MessageBox.Show("剪贴板图文内容为空!", "逆天友情提醒");
            }
        }

        /// <summary>
        /// 生成文档
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnWord_Click(object sender, EventArgs e)
        {
            var dataStr = GetHtmlStr();
            if (!string.IsNullOrEmpty(dataStr))
            {
                MessageBox.Show("操作成功,请看打开的页面!", "逆天友情提醒");
                OutputHtml(dataStr, ".doc");
            }
            else
            {
                MessageBox.Show("剪贴板图文内容为空!", "逆天友情提醒");
            }
        }

        /// <summary>
        /// 导出图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImg_Click(object sender, EventArgs e)
        {
            int i = 0;
            var imgObj = Clipboard.GetImage();
            var dataStr = GetHtmlStr();
            int fileCount = GetFileDrop();
            if (imgObj != null)//非HTML的单张图片
            {
                CreateDirectory("Images");
                imgObj.Save(string.Format(@"Images\{0}.png", GetNewName()), ImageFormat.Png);
                MessageBox.Show("操作成功,请看Images文件夹!", "逆天友情提醒");
                OpenDirectory();
            }
            else if (!string.IsNullOrEmpty(dataStr))
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
                i = DownloadImg(dataStr);
                watch.Stop();
                MessageBox.Show(string.Format("成功提取{0}个图片,耗时{1}。请查看Images文件夹", i, watch.Elapsed), "逆天友情提醒");
                OpenDirectory();
            }
            else if (fileCount > 0)
            {
                MessageBox.Show(string.Format("成功提取{0}个图片,请查看Images文件夹", fileCount), "逆天友情提醒");
                OpenDirectory();
            }
            else
            {
                MessageBox.Show("剪贴板图片信息为空!", "逆天友情提醒");
            }
        }

        /// <summary>
        /// 本地图片-文件路径
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        private int GetFileDrop()
        {
            int i = 0;
            var data = Clipboard.GetDataObject();
            if (data.GetDataPresent(DataFormats.FileDrop, true))
            {
                string[] objs = (string[])data.GetData(DataFormats.FileDrop, true);
                if (objs != null)
                {
                    CreateDirectory("Images");
                    for (int j = 0; j < objs.Length; j++)
                    {
                        File.Copy(objs[i], GetNewName());
                        i++;
                    }
                }
            }
            return i;
        }

        /// <summary>
        /// 批量下载图片
        /// </summary>
        /// <param name="dataStr">页面字符串</param>
        /// <param name="i">成功条数</param>
        /// <returns></returns>
        private static int DownloadImg(string dataStr)
        {
            int i = 0;
            var collection = Regex.Matches(dataStr, @"<img([^>]*)\s*src=('|\"")([^'\""]+)('|\"")", RegexOptions.ECMAScript);
            WebClient webClient = new WebClient();
            foreach (Match item in collection)
            {
                string imgPath = item.Groups[3].Value;
                try
                {
                    CreateDirectory("Images");
                    webClient.DownloadFileAsync(new Uri(imgPath), string.Format(@"Images\{0}.png", Path.GetFileName(imgPath)));//剪贴板的图片没有相对路径
                    i++;
                }
                catch (Exception ex) { File.WriteAllText("log.dnt", ex.ToString(), Encoding.UTF8); }
            }
            return i;
        }

        /// <summary>
        /// 清除剪贴板
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbl1_Click(object sender, EventArgs e)
        {
            ClearClipboard();
            MessageBox.Show("剪贴板清除成功!", "逆天友情提醒");
        }

        #region 公用方法        
        /// <summary>
        /// HTML字符串
        /// </summary>
        /// <returns></returns>
        private static string GetHtmlStr()
        {
            var data = Clipboard.GetDataObject();
            if (data.GetDataPresent(DataFormats.Html, true))
            {
                return data.GetData(DataFormats.Html, true).ToString();
            }
            return string.Empty;
        }

        /// <summary>
        /// 输出HTML文件
        /// </summary>
        /// <param name="dataStr"></param>
        /// <param name="ext"></param>
        private static void OutputHtml(string dataStr, string ext = ".html")
        {
            CreateDirectory("Page");
            string name = string.Format(@"Page\{0}{1}", GetNewName(), ext);
            File.WriteAllText(name, dataStr.Substring(dataStr.IndexOf("<html")), Encoding.UTF8);//除去版权信息
            Process.Start(name);
        }

        /// <summary>
        /// 打开目录
        /// </summary>
        private static void OpenDirectory()
        {
            var result = MessageBox.Show("是否打开文件夹?", "逆天提醒", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
                Process.Start("explorer.exe ", string.Format(@"{0}\images", Directory.GetCurrentDirectory()));//打开目录
        }

        /// <summary>
        /// 生成新名称-就不用 Guid 了,普通用户看见了会怕
        /// </summary>
        /// <returns></returns>
        private static string GetNewName()
        {
            return DateTime.Now.ToString("yyyy-MM-dd~HH.mm.ss.fff");
        }

        /// <summary>
        /// 创建文件夹
        /// </summary>
        private static void CreateDirectory(string name)
        {
            if (!Directory.Exists(name))
            {
                Directory.CreateDirectory(name);
            }
        }

        /// <summary>
        /// 清除剪贴板
        /// </summary>
        private void ClearClipboard()
        {
            Clipboard.Clear();
        }

        #endregion
    }
}

其3组的同伴:李应龙    学号:SZ15111四17)

拿到文本内容var dataStr =
Clipboard.GetText();

获得单个图片var imgObj =
Clipboard.GetImage();

赢得图像和文字格式(网页依然Word之类的)**

var data =
Clipboard.GetDataObject();

if
(data.GetDataPresent(DataFormats.Html, true))

{
  return
data.GetData(DataFormats.Html, true).ToString();

}

正则相配图片:Regex.Matches(dataStr,
@”<img([^>]*)\s*src=(‘|\””)([^’\””]+)(‘|\””)”,
RegexOptions.ECMAScript)

异步批量下载图片: style=”color: #ff6600;”>webClient.DownloadFileAsync(uri,path)

深究进程中,思量到任何不少成分,干洗O贰O项目也没举行下一步细化了,也仅看成多少个小伙伴创业主见的品味和表达,而那份E袋洗用户体验报告还是还保存在有道云笔记中,回过头1想,尽管马上询问“Nelson拾大交互原则”,并从中分析E袋洗,也不一定写出壹篇用户体验稿件给小伙伴们吧。

源码地址:http://pan.baidu.com/s/1b0ajxW

夜晚把结束学业证晒到对象圈,有人问怎么不是运维老板培养和磨炼?也有人问,那两日收获如何、值不值?还有人问,小编是还是不是思索转型了…

(以上全文献给全体起源高校SZ二零一五111四期“产品经营实战练习营”培养和磨练班的同伙们,

第2句是COO雷哥说的,人的挑选都有因果,选拔了怎么因,就会有啥样果。选用插手产品经营培养和磨炼是因,至于得什么果待时间验证,但自己相信每1种选用经历都有其本身意义,无与其急迫求果,不比理想种因。

尽管纠结了1段时间,但谈起底下定狠心在家提前交了占课费(49玖元)。1月初,再次回到温哥华到新公司上班,现集团是创业集团,如故是运转首席营业官岗位,但也经常跟产品、设计打交道。直到上周铺面计划做个移动,须求新开垦贰个版块,自身在与制品老板、研发总管挂钩进度中,尤其意识到自己的阙如,特别是对于产品开辟流程这1块为主是零叩问,有时自个儿的主见也麻烦很好表明出来。

终极,借用Blues老师在他的《产品前线》书中一句话:“产品经营,不是学出来的,而是在施行中闯出来的。”即使培训已终止,但上学仍未截至;尽管结业了,但又将是另三个新起点!

那么些我也没办法具体回答,轻松说下两点:为啥参与源点大学产品总裁培养和练习?原因很简短,本人有点好奇、同时也想学习涨点姿势;参加培养和练习意义怎样?借用一朋友的话,当您感到值了就是值了。

事实上,在那两日认识了无数出自各行各业不一致岗位的小伙伴,有做过研发的、有干过出卖的、也有以前做UI设计、还有当过幼稚园助教的、也有创业者、还有做运转的。培养和练习进度中,小编也发掘到和睦对此研究开发那地点的空域,以致于后边课程有点不在两个频道的感觉,当然,那上边也是协调索要学习升高的工夫。

实则,关怀源点高校有相当短1段时间了。最初是在稠人广众都以产品CEO网址中看看有个别有关网络的干货小说时,好奇的刺探了下“产品COO实战备演练练营”,但出于投机马上转业的是营业方面专门的学问,并且对成品COO认知仅限于张小龙、马化腾(Pony)那样的一代天骄,所以登时并未有做多想。

进而多谢Blues老师、两位班COO雅观的女孩子、班长、雷哥及第三组的小伙伴们!

其间笔记资料

结束学业了,从Blues老师手中接过毕业申明时,才真正发掘到期限两日的“产品主任实战练习营”培养和陶冶结束了!

其实,从前在家一段时间,有几个朋友找笔者一块儿切磋了多个干洗O二O的类型,筹算做个类似E袋洗的成品。由于其它多少个对象做商场和技术,希望作者参与帮扶做些产品布置、文案,但本身以前一直做运行推广,根本没系统摸底任何产品研发流程,只能赶鸭子上架参考E袋洗微信公众号、应用软件体验了壹把,写了三个用户体验稿件给他俩参考。

晒下结束学业证书

那二日非常短、异常快、音讯量也相当大!用老师的话说,他把团结十多年的经验总计压缩成精粹,两日传授给了大家,那恐怕就是对“台上1分钟,台下十年功”的最佳批注吧。

当您想做1件事,却不知底怎么入手的时候,那毋庸置疑是种特别缠绵悱恻的事。所以从那今后,本身也尝试去越多了然产品高管这壹块,并日益萌发想找个阳台学习充电的主张。当然,那也感谢1个朋友指点,当您不通晓做哪些的时候,就去做要好想做的事照旧去学学。辞职后,做完两件本人直接想做的事,然后就计划上学升高一下温馨。