lipboard의 format을 조사하는 도구 만들기
화면 캡처
Excel 2016에서,
를 선택하여 복사한 경우의 결과가 아래 그림.Csv
는 왜인가 String
는 아니고 MemoryStream
같다.
소스 코드
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
class ClipboardTest : Form
{
ListView lsv;
TextBox txtDestFilepath;
Button btnGetList;
Button btnSaveFile;
ClipboardTest()
{
txtDestFilepath = new TextBox();
txtDestFilepath.Text = (new FileInfo("out_dat")).FullName;
txtDestFilepath.ReadOnly = true;
txtDestFilepath.Width = 400;
Controls.Add(txtDestFilepath);
btnGetList = new Button();
btnGetList.Text = "Get Format List";
btnGetList.Size = new Size(150, 30);
btnGetList.Location = new Point(0,40);
btnGetList.Click += (sender,e)=>{ListupClipboardFormat();};
Controls.Add(btnGetList);
btnSaveFile = new Button();
btnSaveFile.Text = "Save as selected format";
btnSaveFile.Size = new Size(150, 30);
btnSaveFile.Location = new Point(0,80);
btnSaveFile.Click += (sender,e)=>{SaveClipboardData();};
btnSaveFile.Enabled = false;
Controls.Add(btnSaveFile);
lsv = new ListView();
lsv.Location = new Point(0, 120);
lsv.Size = new Size(400,400);
lsv.View = View.Details;
lsv.FullRowSelect = true;
lsv.GridLines = true;
lsv.HideSelection = false;
lsv.Columns.Add("Format", 200);
lsv.Columns.Add("Class", 180);
Controls.Add(lsv);
ClientSize = new Size(400,560);
}
void SaveClipboardData()
{
var items = lsv.SelectedItems;
if (items.Count != 1) {
return;
}
try {
btnSaveFile.Enabled = false;
string fmt = items[0].SubItems[0].Text;
//Console.WriteLine(fmt);
SaveClipboardDataAs(txtDestFilepath.Text, fmt);
}
finally {
btnSaveFile.Enabled = true;
}
}
static void SaveClipboardDataAs(string destPath, string fmt)
{
IDataObject data = Clipboard.GetDataObject();
object t = data.GetData(fmt);
if (t is string) {
File.WriteAllText(destPath+".txt", t as string);
//Console.WriteLine(t);
}
else if (t is MemoryStream) {
var ms = t as MemoryStream;
using ( var fs = new FileStream(destPath+".dat", FileMode.Create) ) {
ms.WriteTo(fs);
}
}
else if (t is Bitmap) {
Bitmap bmp = t as Bitmap;
bmp.Save(destPath+".png", ImageFormat.Png);
}
else {
MessageBox.Show("Not supported.");
}
}
void ListupClipboardFormat()
{
lsv.Items.Clear();
lsv.BeginUpdate();
try {
IDataObject data = Clipboard.GetDataObject();
if (data != null) {
foreach (string fmt in data.GetFormats()) {
object tmp = data.GetData(fmt);
string typeName = "<null>";
if ( tmp != null ) {
typeName = tmp.GetType().ToString();
}
lsv.Items.Add(new ListViewItem(new string[]{fmt,typeName}));
Console.WriteLine(fmt+"\t"+typeName);
}
}
}
finally {
lsv.EndUpdate();
}
if ( lsv.Items.Count >= 1 ) {
btnSaveFile.Enabled = true;
}
}
[STAThread]
static void Main(string[] args)
{
Application.Run(new ClipboardTest());
}
}
덧붙여 - HTML 형식에서 깨지는 경우가 있다
⇒ 이 기사 에 기재되어 있습니다.
Reference
이 문제에 관하여(lipboard의 format을 조사하는 도구 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kob58im/items/46ec6f74e3396ba558f1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
class ClipboardTest : Form
{
ListView lsv;
TextBox txtDestFilepath;
Button btnGetList;
Button btnSaveFile;
ClipboardTest()
{
txtDestFilepath = new TextBox();
txtDestFilepath.Text = (new FileInfo("out_dat")).FullName;
txtDestFilepath.ReadOnly = true;
txtDestFilepath.Width = 400;
Controls.Add(txtDestFilepath);
btnGetList = new Button();
btnGetList.Text = "Get Format List";
btnGetList.Size = new Size(150, 30);
btnGetList.Location = new Point(0,40);
btnGetList.Click += (sender,e)=>{ListupClipboardFormat();};
Controls.Add(btnGetList);
btnSaveFile = new Button();
btnSaveFile.Text = "Save as selected format";
btnSaveFile.Size = new Size(150, 30);
btnSaveFile.Location = new Point(0,80);
btnSaveFile.Click += (sender,e)=>{SaveClipboardData();};
btnSaveFile.Enabled = false;
Controls.Add(btnSaveFile);
lsv = new ListView();
lsv.Location = new Point(0, 120);
lsv.Size = new Size(400,400);
lsv.View = View.Details;
lsv.FullRowSelect = true;
lsv.GridLines = true;
lsv.HideSelection = false;
lsv.Columns.Add("Format", 200);
lsv.Columns.Add("Class", 180);
Controls.Add(lsv);
ClientSize = new Size(400,560);
}
void SaveClipboardData()
{
var items = lsv.SelectedItems;
if (items.Count != 1) {
return;
}
try {
btnSaveFile.Enabled = false;
string fmt = items[0].SubItems[0].Text;
//Console.WriteLine(fmt);
SaveClipboardDataAs(txtDestFilepath.Text, fmt);
}
finally {
btnSaveFile.Enabled = true;
}
}
static void SaveClipboardDataAs(string destPath, string fmt)
{
IDataObject data = Clipboard.GetDataObject();
object t = data.GetData(fmt);
if (t is string) {
File.WriteAllText(destPath+".txt", t as string);
//Console.WriteLine(t);
}
else if (t is MemoryStream) {
var ms = t as MemoryStream;
using ( var fs = new FileStream(destPath+".dat", FileMode.Create) ) {
ms.WriteTo(fs);
}
}
else if (t is Bitmap) {
Bitmap bmp = t as Bitmap;
bmp.Save(destPath+".png", ImageFormat.Png);
}
else {
MessageBox.Show("Not supported.");
}
}
void ListupClipboardFormat()
{
lsv.Items.Clear();
lsv.BeginUpdate();
try {
IDataObject data = Clipboard.GetDataObject();
if (data != null) {
foreach (string fmt in data.GetFormats()) {
object tmp = data.GetData(fmt);
string typeName = "<null>";
if ( tmp != null ) {
typeName = tmp.GetType().ToString();
}
lsv.Items.Add(new ListViewItem(new string[]{fmt,typeName}));
Console.WriteLine(fmt+"\t"+typeName);
}
}
}
finally {
lsv.EndUpdate();
}
if ( lsv.Items.Count >= 1 ) {
btnSaveFile.Enabled = true;
}
}
[STAThread]
static void Main(string[] args)
{
Application.Run(new ClipboardTest());
}
}
덧붙여 - HTML 형식에서 깨지는 경우가 있다
⇒ 이 기사 에 기재되어 있습니다.
Reference
이 문제에 관하여(lipboard의 format을 조사하는 도구 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kob58im/items/46ec6f74e3396ba558f1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(lipboard의 format을 조사하는 도구 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kob58im/items/46ec6f74e3396ba558f1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)