万恶的剪贴板==》为存储而生
时间:2022-05-07
本文章向大家介绍万恶的剪贴板==》为存储而生,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
近几天逆天经常大量复制粘贴一些图文信息,在某些特定的场合,图片都是无法直接粘贴进去的,就比如博客园的编辑器。
源码:https://github.com/dunitian/DNTLive/tree/master/Software/万恶剪贴板
要弄个什么还要把word里面的图片或者网上的图片先弄出来,这是多么的蛋疼啊~
于是就有了万恶的剪贴板==》为存储而生
其实是个很简单的功能点==》稍微说下核心代码
获取文本内容: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) 异步批量下载图片:webClient.DownloadFileAsync(uri,path)
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
}
}
源码地址:http://pan.baidu.com/s/1b0ajxW
备用地址:https://github.com/dunitian/DNTLive/tree/master/Software/万恶剪贴板
- 机器学习之线性回归:算法兑现为python代码
- 回溯树求集合全排列和所有子集
- 机器学习工具:Python 和 Numpy入门
- 机器学习决策树:sklearn分类和回归
- 机器学习决策树:提炼出分类器算法
- 机器学习:XGBoost 安装及实战应用
- Ryu:如何在LLDP中添加自定义LLDPDU
- 机器学习|kaggle数据挖掘和求解的基本步骤
- mybatis_generator_逆向工程的使用笔记
- 纳税服务系统总结
- 纳税服务系统一(用户模块)【简单增删改查、日期组件、上传和修改头像】
- 纳税服务系统三(优化处理)【异常处理、抽取BaseAction】
- 机器学习|快速排序思想求topk
- 纳税服务系统二(用户模块)【POI、用户唯一性校验】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php常用字符串查找函数strstr()与strpos()实例分析
- php 根据URL下载远程图片、压缩包、pdf等文件到本地
- PHP使用HTML5 FormData对象提交表单操作示例
- python接入支付宝的实例操作
- php实现网页上一页下一页翻页过程详解
- Yii 使用intervention/image拓展实现图像处理功能
- PHP常用的类封装小结【4个工具类】
- 微信公众号之主动给用户发送消息功能
- laravel异步监控定时调度器实例详解
- python按顺序重命名文件并分类转移到各个文件夹中的实现代码
- Python实现删除某列中含有空值的行的示例代码
- python打开音乐文件的实例方法
- PHP基础之输出缓冲区基本概念、原理分析
- 基于python实现删除指定文件类型
- sync-player:使用websocket实现异地同步播放视频