using System;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;
using System.Collections.Generic;
using WK.Libraries.SharpClipboardNS;
namespace SharpClipboardPreview.Tests
{
///
/// The main application window.
///
public partial class MainForm : Form
{
#region Constructor
public MainForm()
{
InitializeComponent();
// Assign the various checkboxes to enable/disable
// the supported clipboard formats respectively.
chkMonitorClipboard.Checked = sharpClipboard1.MonitorClipboard;
chkObserveTexts.Checked = sharpClipboard1.ObservableFormats.Texts;
chkObserveFiles.Checked = sharpClipboard1.ObservableFormats.Files;
chkObserveImages.Checked = sharpClipboard1.ObservableFormats.Images;
}
#endregion
#region Events
private void sharpClipboard1_MonitorClipboardChanged(object sender, EventArgs e)
{
chkMonitorClipboard.Checked = sharpClipboard1.MonitorClipboard;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
sharpClipboard1.MonitorClipboard = chkMonitorClipboard.Checked;
}
private void chkObserveTexts_CheckedChanged(object sender, EventArgs e)
{
sharpClipboard1.ObservableFormats.Texts = chkObserveTexts.Checked;
}
private void chkObserveImages_CheckedChanged(object sender, EventArgs e)
{
sharpClipboard1.ObservableFormats.Images = chkObserveImages.Checked;
}
private void chkObserveFiles_CheckedChanged(object sender, EventArgs e)
{
sharpClipboard1.ObservableFormats.Files = chkObserveFiles.Checked;
}
private void sharpClipboard1_ClipboardChanged(object sender, SharpClipboard.ClipboardChangedEventArgs e)
{
if (e.ContentType == SharpClipboard.ContentTypes.Text)
{
txtCopiedTexts.Text = sharpClipboard1.ClipboardText;
// Alternatively, you can use:
// ---------------------------
// txtCopiedTexts.Text = (string)e.Content;
}
else if (e.ContentType == SharpClipboard.ContentTypes.Image)
{
pbCopiedImage.Image = sharpClipboard1.ClipboardImage;
// Alternatively, you can use:
// ---------------------------
// pbCopiedImage.Image = (Image)e.Content;
}
else if (e.ContentType == SharpClipboard.ContentTypes.Files)
{
// Declare variable to add the list of copied files.
List files = new List();
// Add all copied files to the declared variable.
foreach (string file in sharpClipboard1.ClipboardFiles)
{
files.Add(Path.GetFileName(file));
}
Debug.WriteLine(sharpClipboard1.ClipboardFiles.ToArray());
// Add all copied files to the files ListBox.
lstCopiedFiles.Items.Clear();
lstCopiedFiles.Items.AddRange(files.ToArray());
// Alternatively, you can use:
// ---------------------------
// lstCopiedFiles.Items.AddRange(((List)e.Content).ToArray()));
}
else if (e.ContentType == SharpClipboard.ContentTypes.Other)
{
// Do something with 'e.Content' or alternatively
// 'sharpClipboard1.ClipboardObject' property here...
// A great example is when a user has copied an Outlook Mail item.
// Such an item will be of a complex object-type that can be parsed and
// examined using the 'Microsoft.Office.Interop.Outlook' namespace features.
// See here: https://stackoverflow.com/questions/25375367/how-to-copy-mailitem-in-outlook-c-sharp
// You can however still use the 'ClipboardText' property if you
// prefer simply displaying the copied object in text format.
txtCopiedTexts.Text = sharpClipboard1.ClipboardText.ToString();
}
// If you wish to get details of the application from where
// any text, file, image or other objects were cut/copied,
// simply add a TextBox and uncomment the lines below.
// --------------------------------------------------------
// textBox1.Text =
// $"Name: {e.SourceApplication.Name} \n" +
// $"Title: {e.SourceApplication.Title} \n" +
// $"ID: {e.SourceApplication.ID} \n" +
// $"Handle: {e.SourceApplication.Handle} \n" +
// $"Path: {e.SourceApplication.Path}";
// --------------------------------------------------------
// This could come in-handy if you're developing a clipboard-monitoring app.
}
#endregion
}
}