Sicherung
This commit is contained in:
63
SharpClipboard/.gitattributes
vendored
Normal file
63
SharpClipboard/.gitattributes
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
12
SharpClipboard/.github/FUNDING.yml
vendored
Normal file
12
SharpClipboard/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: ['https://www.buymeacoffee.com/willykimura']
|
||||
262
SharpClipboard/.gitignore
vendored
Normal file
262
SharpClipboard/.gitignore
vendored
Normal file
@@ -0,0 +1,262 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
*.nuspec
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# DNX
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
#*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
BIN
SharpClipboard/Assets/clipboard.png
Normal file
BIN
SharpClipboard/Assets/clipboard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
BIN
SharpClipboard/Assets/sharpclipboard-preview-01.png
Normal file
BIN
SharpClipboard/Assets/sharpclipboard-preview-01.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
BIN
SharpClipboard/Assets/sharpclipboard-preview-02.png
Normal file
BIN
SharpClipboard/Assets/sharpclipboard-preview-02.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
BIN
SharpClipboard/Assets/sharpclipboard-usage-01.gif
Normal file
BIN
SharpClipboard/Assets/sharpclipboard-usage-01.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 504 KiB |
BIN
SharpClipboard/Assets/sharpclipboard-usage-02.gif
Normal file
BIN
SharpClipboard/Assets/sharpclipboard-usage-02.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
BIN
SharpClipboard/Assets/sharpclipboard-usage-03.gif
Normal file
BIN
SharpClipboard/Assets/sharpclipboard-usage-03.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 MiB |
111
SharpClipboard/README.md
Normal file
111
SharpClipboard/README.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# SharpClipboard
|
||||
[](https://www.nuget.org/packages/SharpClipboard/) [](https://www.buymeacoffee.com/willykimura)
|
||||
|
||||
**SharpClipboard** is a clipboard-monitoring library for .NET that listens to the system's clipboard entries,
|
||||
allowing developers to tap into the rich capabilities of determining the clipboard's contents at runtime.
|
||||
|
||||
Here's a screenshot and below a usage-preview of the library's features:
|
||||
|
||||

|
||||

|
||||
|
||||
# Installation
|
||||
To install via the [NuGet Package Manager](https://www.nuget.org/packages/SharpClipboard/) Console, run:
|
||||
|
||||
> `Install-Package SharpClipboard`
|
||||
|
||||
# Features
|
||||
- Supports [.NET Framework 2.0](https://www.microsoft.com/en-us/download/details.aspx?id=6523) and above plus [.NET Core](https://dotnet.microsoft.com/download).
|
||||
- Built as a component making it accessible in Design Mode.
|
||||
- Silently monitors the system clipboard uninterrupted; can also be disabled while running.
|
||||
- Provides support for multi-instance clipboard monitoring.
|
||||
- Ability to detect clipboard content in various formats: **text**, **images**, **files**, and **other complex types**.
|
||||
- Option to control the type of content to be monitored, e.g. **text** only, **text** and **images** only.
|
||||
- Ability to capture the background application's details from where the clipboard's contents were captured.
|
||||
# Usage
|
||||
If you prefer working with the Designer, simply add the library to Visual Studio's Toolbox and use the
|
||||
*Properties* window to change its options:
|
||||
|
||||

|
||||
|
||||
To use it in code, first import `WK.Libraries.SharpClipboardNS` - the code below will then assist you:
|
||||
```c#
|
||||
var clipboard = new SharpClipboard();
|
||||
|
||||
// Attach your code to the ClipboardChanged event to listen to cuts/copies.
|
||||
clipboard.ClipboardChanged += ClipboardChanged;
|
||||
|
||||
private void ClipboardChanged(Object sender, ClipboardChangedEventArgs e)
|
||||
{
|
||||
// Is the content copied of text type?
|
||||
if (e.ContentType == SharpClipboard.ContentTypes.Text)
|
||||
{
|
||||
// Get the cut/copied text.
|
||||
Debug.WriteLine(clipboard.ClipboardText);
|
||||
}
|
||||
|
||||
// Is the content copied of image type?
|
||||
else if (e.ContentType == SharpClipboard.ContentTypes.Image)
|
||||
{
|
||||
// Get the cut/copied image.
|
||||
Image img = clipboard.ClipboardImage;
|
||||
}
|
||||
|
||||
// Is the content copied of file type?
|
||||
else if (e.ContentType == SharpClipboard.ContentTypes.Files)
|
||||
{
|
||||
// Get the cut/copied file/files.
|
||||
Debug.WriteLine(clipboard.ClipboardFiles.ToArray());
|
||||
|
||||
// ...or use 'ClipboardFile' to get a single copied file.
|
||||
Debug.WriteLine(clipboard.ClipboardFile);
|
||||
}
|
||||
|
||||
// If the cut/copied content is complex, use 'Other'.
|
||||
else if (e.ContentType == SharpClipboard.ContentTypes.Other)
|
||||
{
|
||||
// Do something with 'clipboard.ClipboardObject' or 'e.Content' here...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can also get the details of the application from where the clipboard's contents were cut/copied from using the `ClipboardChanged` argument property `SourceApplication`:
|
||||
|
||||
```c#
|
||||
private void ClipboardChanged(Object sender, SharpClipboard.ClipboardChangedEventArgs e)
|
||||
{
|
||||
// Gets the application's executable name.
|
||||
Debug.WriteLine(e.SourceApplication.Name);
|
||||
// Gets the application's window title.
|
||||
Debug.WriteLine(e.SourceApplication.Title);
|
||||
// Gets the application's process ID.
|
||||
Debug.WriteLine(e.SourceApplication.ID.ToString());
|
||||
// Gets the application's executable path.
|
||||
Debug.WriteLine(e.SourceApplication.Path);
|
||||
}
|
||||
```
|
||||
|
||||
This option could come in handy especially when you're building a clipboard-monitoring application where users may feel the need to know where every recorded cut/copy action occurred.
|
||||
|
||||
To manually parse the content after a cut/copy has been detected, you can use the argument property `e.Content` in the `ClipboardChanged` event:
|
||||
|
||||
```c#
|
||||
private void ClipboardChanged(Object sender, ClipboardChangedEventArgs e)
|
||||
{
|
||||
// For texts...
|
||||
string text = e.Content.ToString();
|
||||
|
||||
// or images...
|
||||
Image img = (Image)e.Content;
|
||||
|
||||
// or files...
|
||||
List<string> files = (List<string>)e.Content;
|
||||
|
||||
// or other complex types too.
|
||||
// Person p = JsonConvert.DeserializeObject<Person>(e.Content);
|
||||
}
|
||||
```
|
||||
|
||||
<hr>
|
||||
|
||||
*Made with* 💛 *by* [*Willy Kimura*]([https://github.com/Willy-Kimura) | *Like to say thank you?* ***Star*** *this project. Feel free to [BuyMeACoffee](https://www.buymeacoffee.com/willykimura) also.* 😊
|
||||
442
SharpClipboard/SharpClipboard.Tests.NetCoreWinForms/MainForm.Designer.cs
generated
Normal file
442
SharpClipboard/SharpClipboard.Tests.NetCoreWinForms/MainForm.Designer.cs
generated
Normal file
@@ -0,0 +1,442 @@
|
||||
using WK.Libraries.SharpClipboardNS;
|
||||
|
||||
namespace SharpClipboard.Tests.NetCoreWinForms
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||
this.chkMonitorClipboard = new System.Windows.Forms.CheckBox();
|
||||
this.lblTitle = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.lblOptions = new System.Windows.Forms.Label();
|
||||
this.grpLibrarySettings = new System.Windows.Forms.GroupBox();
|
||||
this.grpObservableFormats = new System.Windows.Forms.GroupBox();
|
||||
this.lblObservableFilesDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveFiles = new System.Windows.Forms.CheckBox();
|
||||
this.lblObservableImagesDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveImages = new System.Windows.Forms.CheckBox();
|
||||
this.lblObservableTextsDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveTexts = new System.Windows.Forms.CheckBox();
|
||||
this.txtCopiedTexts = new System.Windows.Forms.TextBox();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.pbCopiedImage = new System.Windows.Forms.PictureBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.panel4 = new System.Windows.Forms.Panel();
|
||||
this.lstCopiedFiles = new System.Windows.Forms.ListBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.sharpClipboard1 = new WK.Libraries.SharpClipboardNS.SharpClipboard(this.components);
|
||||
this.panel1.SuspendLayout();
|
||||
this.grpLibrarySettings.SuspendLayout();
|
||||
this.grpObservableFormats.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panel3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCopiedImage)).BeginInit();
|
||||
this.panel4.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// chkMonitorClipboard
|
||||
//
|
||||
this.chkMonitorClipboard.AutoSize = true;
|
||||
this.chkMonitorClipboard.Checked = true;
|
||||
this.chkMonitorClipboard.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkMonitorClipboard.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F);
|
||||
this.chkMonitorClipboard.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkMonitorClipboard.Location = new System.Drawing.Point(17, 33);
|
||||
this.chkMonitorClipboard.Name = "chkMonitorClipboard";
|
||||
this.chkMonitorClipboard.Size = new System.Drawing.Size(138, 21);
|
||||
this.chkMonitorClipboard.TabIndex = 1;
|
||||
this.chkMonitorClipboard.Text = "Monitor Clipboard";
|
||||
this.chkMonitorClipboard.UseVisualStyleBackColor = true;
|
||||
this.chkMonitorClipboard.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
|
||||
//
|
||||
// lblTitle
|
||||
//
|
||||
this.lblTitle.AutoSize = true;
|
||||
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 15.75F);
|
||||
this.lblTitle.ForeColor = System.Drawing.Color.DodgerBlue;
|
||||
this.lblTitle.Location = new System.Drawing.Point(22, 14);
|
||||
this.lblTitle.Name = "lblTitle";
|
||||
this.lblTitle.Size = new System.Drawing.Size(155, 30);
|
||||
this.lblTitle.TabIndex = 3;
|
||||
this.lblTitle.Text = "SharpClipboard";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.BackColor = System.Drawing.Color.White;
|
||||
this.panel1.Controls.Add(this.lblOptions);
|
||||
this.panel1.Controls.Add(this.grpLibrarySettings);
|
||||
this.panel1.Controls.Add(this.lblTitle);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(312, 397);
|
||||
this.panel1.TabIndex = 4;
|
||||
//
|
||||
// lblOptions
|
||||
//
|
||||
this.lblOptions.AutoSize = true;
|
||||
this.lblOptions.Font = new System.Drawing.Font("Segoe UI Semibold", 15.75F);
|
||||
this.lblOptions.ForeColor = System.Drawing.Color.Black;
|
||||
this.lblOptions.Location = new System.Drawing.Point(171, 14);
|
||||
this.lblOptions.Name = "lblOptions";
|
||||
this.lblOptions.Size = new System.Drawing.Size(89, 30);
|
||||
this.lblOptions.TabIndex = 6;
|
||||
this.lblOptions.Text = "Options";
|
||||
//
|
||||
// grpLibrarySettings
|
||||
//
|
||||
this.grpLibrarySettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpLibrarySettings.Controls.Add(this.grpObservableFormats);
|
||||
this.grpLibrarySettings.Controls.Add(this.chkMonitorClipboard);
|
||||
this.grpLibrarySettings.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.grpLibrarySettings.ForeColor = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.grpLibrarySettings.Location = new System.Drawing.Point(26, 57);
|
||||
this.grpLibrarySettings.Name = "grpLibrarySettings";
|
||||
this.grpLibrarySettings.Size = new System.Drawing.Size(261, 327);
|
||||
this.grpLibrarySettings.TabIndex = 5;
|
||||
this.grpLibrarySettings.TabStop = false;
|
||||
this.grpLibrarySettings.Text = "Change library settings";
|
||||
//
|
||||
// grpObservableFormats
|
||||
//
|
||||
this.grpObservableFormats.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableFilesDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveFiles);
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableImagesDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveImages);
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableTextsDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveTexts);
|
||||
this.grpObservableFormats.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.grpObservableFormats.ForeColor = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.grpObservableFormats.Location = new System.Drawing.Point(17, 74);
|
||||
this.grpObservableFormats.Name = "grpObservableFormats";
|
||||
this.grpObservableFormats.Size = new System.Drawing.Size(229, 238);
|
||||
this.grpObservableFormats.TabIndex = 6;
|
||||
this.grpObservableFormats.TabStop = false;
|
||||
this.grpObservableFormats.Text = "Observable Formats";
|
||||
//
|
||||
// lblObservableFilesDesc
|
||||
//
|
||||
this.lblObservableFilesDesc.AutoSize = true;
|
||||
this.lblObservableFilesDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.lblObservableFilesDesc.ForeColor = System.Drawing.Color.Gray;
|
||||
this.lblObservableFilesDesc.Location = new System.Drawing.Point(33, 184);
|
||||
this.lblObservableFilesDesc.Name = "lblObservableFilesDesc";
|
||||
this.lblObservableFilesDesc.Size = new System.Drawing.Size(176, 30);
|
||||
this.lblObservableFilesDesc.TabIndex = 11;
|
||||
this.lblObservableFilesDesc.Text = "Monitors any files/directories \r\nthat are copied to the clipboard.";
|
||||
//
|
||||
// chkObserveFiles
|
||||
//
|
||||
this.chkObserveFiles.AutoSize = true;
|
||||
this.chkObserveFiles.Checked = true;
|
||||
this.chkObserveFiles.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveFiles.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F);
|
||||
this.chkObserveFiles.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveFiles.Location = new System.Drawing.Point(17, 163);
|
||||
this.chkObserveFiles.Name = "chkObserveFiles";
|
||||
this.chkObserveFiles.Size = new System.Drawing.Size(53, 21);
|
||||
this.chkObserveFiles.TabIndex = 10;
|
||||
this.chkObserveFiles.Text = "Files";
|
||||
this.chkObserveFiles.UseVisualStyleBackColor = true;
|
||||
this.chkObserveFiles.CheckedChanged += new System.EventHandler(this.chkObserveFiles_CheckedChanged);
|
||||
//
|
||||
// lblObservableImagesDesc
|
||||
//
|
||||
this.lblObservableImagesDesc.AutoSize = true;
|
||||
this.lblObservableImagesDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.lblObservableImagesDesc.ForeColor = System.Drawing.Color.Gray;
|
||||
this.lblObservableImagesDesc.Location = new System.Drawing.Point(33, 120);
|
||||
this.lblObservableImagesDesc.Name = "lblObservableImagesDesc";
|
||||
this.lblObservableImagesDesc.Size = new System.Drawing.Size(164, 30);
|
||||
this.lblObservableImagesDesc.TabIndex = 9;
|
||||
this.lblObservableImagesDesc.Text = "Monitors any images that are \r\ncopied to the clipboard.";
|
||||
//
|
||||
// chkObserveImages
|
||||
//
|
||||
this.chkObserveImages.AutoSize = true;
|
||||
this.chkObserveImages.Checked = true;
|
||||
this.chkObserveImages.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveImages.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F);
|
||||
this.chkObserveImages.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveImages.Location = new System.Drawing.Point(17, 99);
|
||||
this.chkObserveImages.Name = "chkObserveImages";
|
||||
this.chkObserveImages.Size = new System.Drawing.Size(71, 21);
|
||||
this.chkObserveImages.TabIndex = 8;
|
||||
this.chkObserveImages.Text = "Images";
|
||||
this.chkObserveImages.UseVisualStyleBackColor = true;
|
||||
this.chkObserveImages.CheckedChanged += new System.EventHandler(this.chkObserveImages_CheckedChanged);
|
||||
//
|
||||
// lblObservableTextsDesc
|
||||
//
|
||||
this.lblObservableTextsDesc.AutoSize = true;
|
||||
this.lblObservableTextsDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.lblObservableTextsDesc.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.lblObservableTextsDesc.Location = new System.Drawing.Point(33, 54);
|
||||
this.lblObservableTextsDesc.Name = "lblObservableTextsDesc";
|
||||
this.lblObservableTextsDesc.Size = new System.Drawing.Size(151, 30);
|
||||
this.lblObservableTextsDesc.TabIndex = 7;
|
||||
this.lblObservableTextsDesc.Text = "Monitors any texts that are \r\ncopied to the clipboard.";
|
||||
//
|
||||
// chkObserveTexts
|
||||
//
|
||||
this.chkObserveTexts.AutoSize = true;
|
||||
this.chkObserveTexts.Checked = true;
|
||||
this.chkObserveTexts.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveTexts.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F);
|
||||
this.chkObserveTexts.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveTexts.Location = new System.Drawing.Point(17, 33);
|
||||
this.chkObserveTexts.Name = "chkObserveTexts";
|
||||
this.chkObserveTexts.Size = new System.Drawing.Size(58, 21);
|
||||
this.chkObserveTexts.TabIndex = 1;
|
||||
this.chkObserveTexts.Text = "Texts";
|
||||
this.chkObserveTexts.UseVisualStyleBackColor = true;
|
||||
this.chkObserveTexts.CheckedChanged += new System.EventHandler(this.chkObserveTexts_CheckedChanged);
|
||||
//
|
||||
// txtCopiedTexts
|
||||
//
|
||||
this.txtCopiedTexts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCopiedTexts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.txtCopiedTexts.Location = new System.Drawing.Point(8, 69);
|
||||
this.txtCopiedTexts.Multiline = true;
|
||||
this.txtCopiedTexts.Name = "txtCopiedTexts";
|
||||
this.txtCopiedTexts.Size = new System.Drawing.Size(236, 314);
|
||||
this.txtCopiedTexts.TabIndex = 5;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.BackColor = System.Drawing.Color.Honeydew;
|
||||
this.panel2.Controls.Add(this.label1);
|
||||
this.panel2.Controls.Add(this.txtCopiedTexts);
|
||||
this.panel2.Controls.Add(this.label2);
|
||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel2.Location = new System.Drawing.Point(312, 0);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.Size = new System.Drawing.Size(252, 397);
|
||||
this.panel2.TabIndex = 6;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Font = new System.Drawing.Font("Segoe UI", 15.75F);
|
||||
this.label1.ForeColor = System.Drawing.Color.Black;
|
||||
this.label1.Location = new System.Drawing.Point(25, 14);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(130, 30);
|
||||
this.label1.TabIndex = 7;
|
||||
this.label1.Text = "Copied Texts";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.label2.Location = new System.Drawing.Point(27, 43);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(99, 15);
|
||||
this.label2.TabIndex = 8;
|
||||
this.label2.Text = "will appear here...";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(255)))));
|
||||
this.panel3.Controls.Add(this.pbCopiedImage);
|
||||
this.panel3.Controls.Add(this.label3);
|
||||
this.panel3.Controls.Add(this.label4);
|
||||
this.panel3.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel3.Location = new System.Drawing.Point(564, 0);
|
||||
this.panel3.Name = "panel3";
|
||||
this.panel3.Size = new System.Drawing.Size(252, 397);
|
||||
this.panel3.TabIndex = 7;
|
||||
//
|
||||
// pbCopiedImage
|
||||
//
|
||||
this.pbCopiedImage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pbCopiedImage.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pbCopiedImage.Image = null;
|
||||
this.pbCopiedImage.Location = new System.Drawing.Point(7, 69);
|
||||
this.pbCopiedImage.Name = "pbCopiedImage";
|
||||
this.pbCopiedImage.Size = new System.Drawing.Size(237, 313);
|
||||
this.pbCopiedImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCopiedImage.TabIndex = 9;
|
||||
this.pbCopiedImage.TabStop = false;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Font = new System.Drawing.Font("Segoe UI", 15.75F);
|
||||
this.label3.ForeColor = System.Drawing.Color.Black;
|
||||
this.label3.Location = new System.Drawing.Point(25, 14);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(163, 30);
|
||||
this.label3.TabIndex = 7;
|
||||
this.label3.Text = "Copied Image(s)";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.label4.Location = new System.Drawing.Point(27, 43);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(99, 15);
|
||||
this.label4.TabIndex = 8;
|
||||
this.label4.Text = "will appear here...";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.panel4.BackColor = System.Drawing.Color.Ivory;
|
||||
this.panel4.Controls.Add(this.lstCopiedFiles);
|
||||
this.panel4.Controls.Add(this.label5);
|
||||
this.panel4.Controls.Add(this.label6);
|
||||
this.panel4.Location = new System.Drawing.Point(816, 0);
|
||||
this.panel4.Name = "panel4";
|
||||
this.panel4.Size = new System.Drawing.Size(252, 397);
|
||||
this.panel4.TabIndex = 8;
|
||||
//
|
||||
// lstCopiedFiles
|
||||
//
|
||||
this.lstCopiedFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lstCopiedFiles.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.lstCopiedFiles.FormattingEnabled = true;
|
||||
this.lstCopiedFiles.HorizontalScrollbar = true;
|
||||
this.lstCopiedFiles.Location = new System.Drawing.Point(8, 69);
|
||||
this.lstCopiedFiles.Name = "lstCopiedFiles";
|
||||
this.lstCopiedFiles.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
|
||||
this.lstCopiedFiles.Size = new System.Drawing.Size(236, 314);
|
||||
this.lstCopiedFiles.TabIndex = 11;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Font = new System.Drawing.Font("Segoe UI", 15.75F);
|
||||
this.label5.ForeColor = System.Drawing.Color.Black;
|
||||
this.label5.Location = new System.Drawing.Point(25, 14);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(136, 30);
|
||||
this.label5.TabIndex = 7;
|
||||
this.label5.Text = "Copied File(s)";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.label6.Location = new System.Drawing.Point(27, 43);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(99, 15);
|
||||
this.label6.TabIndex = 8;
|
||||
this.label6.Text = "will appear here...";
|
||||
//
|
||||
// sharpClipboard1
|
||||
//
|
||||
this.sharpClipboard1.MonitorClipboard = true;
|
||||
this.sharpClipboard1.ObservableFormats.All = true;
|
||||
this.sharpClipboard1.ObservableFormats.Files = true;
|
||||
this.sharpClipboard1.ObservableFormats.Images = true;
|
||||
this.sharpClipboard1.ObservableFormats.Others = true;
|
||||
this.sharpClipboard1.ObservableFormats.Texts = true;
|
||||
this.sharpClipboard1.ObserveLastEntry = true;
|
||||
this.sharpClipboard1.Tag = null;
|
||||
this.sharpClipboard1.ClipboardChanged += new System.EventHandler<WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs>(this.sharpClipboard1_ClipboardChanged);
|
||||
this.sharpClipboard1.MonitorClipboardChanged += new System.EventHandler<System.EventArgs>(this.sharpClipboard1_MonitorClipboardChanged);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1068, 397);
|
||||
this.Controls.Add(this.panel4);
|
||||
this.Controls.Add(this.panel3);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Name = "MainForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "SharpClipboard: Tests";
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.grpLibrarySettings.ResumeLayout(false);
|
||||
this.grpLibrarySettings.PerformLayout();
|
||||
this.grpObservableFormats.ResumeLayout(false);
|
||||
this.grpObservableFormats.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel2.PerformLayout();
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCopiedImage)).EndInit();
|
||||
this.panel4.ResumeLayout(false);
|
||||
this.panel4.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private WK.Libraries.SharpClipboardNS.SharpClipboard sharpClipboard1;
|
||||
private System.Windows.Forms.CheckBox chkMonitorClipboard;
|
||||
private System.Windows.Forms.Label lblTitle;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.GroupBox grpLibrarySettings;
|
||||
private System.Windows.Forms.GroupBox grpObservableFormats;
|
||||
private System.Windows.Forms.CheckBox chkObserveTexts;
|
||||
private System.Windows.Forms.Label lblOptions;
|
||||
private System.Windows.Forms.Label lblObservableFilesDesc;
|
||||
private System.Windows.Forms.CheckBox chkObserveFiles;
|
||||
private System.Windows.Forms.Label lblObservableImagesDesc;
|
||||
private System.Windows.Forms.CheckBox chkObserveImages;
|
||||
private System.Windows.Forms.Label lblObservableTextsDesc;
|
||||
private System.Windows.Forms.TextBox txtCopiedTexts;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.PictureBox pbCopiedImage;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.ListBox lstCopiedFiles;
|
||||
}
|
||||
}
|
||||
|
||||
126
SharpClipboard/SharpClipboard.Tests.NetCoreWinForms/MainForm.cs
Normal file
126
SharpClipboard/SharpClipboard.Tests.NetCoreWinForms/MainForm.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.Security.Principal;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SharpClipboard.Tests.NetCoreWinForms
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private static WK.Libraries.SharpClipboardNS.SharpClipboard clipboard =
|
||||
new WK.Libraries.SharpClipboardNS.SharpClipboard();
|
||||
|
||||
#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, WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs e)
|
||||
{
|
||||
if (e.ContentType == WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Text)
|
||||
{
|
||||
txtCopiedTexts.Text = sharpClipboard1.ClipboardText;
|
||||
|
||||
// Alternatively, you can use:
|
||||
// ---------------------------
|
||||
// txtCopiedTexts.Text = (string)e.Content;
|
||||
}
|
||||
else if (e.ContentType == WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Image)
|
||||
{
|
||||
pbCopiedImage.Image = sharpClipboard1.ClipboardImage;
|
||||
|
||||
// Alternatively, you can use:
|
||||
// ---------------------------
|
||||
// pbCopiedImage.Image = (Image)e.Content;
|
||||
}
|
||||
else if (e.ContentType == WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Files)
|
||||
{
|
||||
// Declare variable to add the list of copied files.
|
||||
List<string> files = new List<string>();
|
||||
|
||||
// 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<string>)e.Content).ToArray()));
|
||||
}
|
||||
else if (e.ContentType == WK.Libraries.SharpClipboardNS.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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace SharpClipboard.Tests.NetCoreWinForms
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SharpClipboard\SharpClipboard.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
6
SharpClipboard/SharpClipboard.Tests.WinForms/App.config
Normal file
6
SharpClipboard/SharpClipboard.Tests.WinForms/App.config
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
|
||||
<supportedRuntime version="v2.0.50727"/></startup>
|
||||
</configuration>
|
||||
470
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.Designer.cs
generated
Normal file
470
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.Designer.cs
generated
Normal file
@@ -0,0 +1,470 @@
|
||||
using WK.Libraries.SharpClipboardNS;
|
||||
|
||||
namespace SharpClipboardPreview.Tests
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||
this.chkMonitorClipboard = new System.Windows.Forms.CheckBox();
|
||||
this.lblTitle = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.lblOptions = new System.Windows.Forms.Label();
|
||||
this.grpLibrarySettings = new System.Windows.Forms.GroupBox();
|
||||
this.grpObservableFormats = new System.Windows.Forms.GroupBox();
|
||||
this.lblObservableFilesDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveFiles = new System.Windows.Forms.CheckBox();
|
||||
this.lblObservableImagesDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveImages = new System.Windows.Forms.CheckBox();
|
||||
this.lblObservableTextsDesc = new System.Windows.Forms.Label();
|
||||
this.chkObserveTexts = new System.Windows.Forms.CheckBox();
|
||||
this.txtCopiedTexts = new System.Windows.Forms.TextBox();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.pbCopiedImage = new System.Windows.Forms.PictureBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.panel4 = new System.Windows.Forms.Panel();
|
||||
this.lstCopiedFiles = new System.Windows.Forms.ListBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.sharpClipboard1 = new WK.Libraries.SharpClipboardNS.SharpClipboard(this.components);
|
||||
this.panel1.SuspendLayout();
|
||||
this.grpLibrarySettings.SuspendLayout();
|
||||
this.grpObservableFormats.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panel3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCopiedImage)).BeginInit();
|
||||
this.panel4.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// chkMonitorClipboard
|
||||
//
|
||||
this.chkMonitorClipboard.AutoSize = true;
|
||||
this.chkMonitorClipboard.Checked = true;
|
||||
this.chkMonitorClipboard.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkMonitorClipboard.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.chkMonitorClipboard.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkMonitorClipboard.Location = new System.Drawing.Point(20, 38);
|
||||
this.chkMonitorClipboard.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.chkMonitorClipboard.Name = "chkMonitorClipboard";
|
||||
this.chkMonitorClipboard.Size = new System.Drawing.Size(138, 21);
|
||||
this.chkMonitorClipboard.TabIndex = 1;
|
||||
this.chkMonitorClipboard.Text = "Monitor Clipboard";
|
||||
this.chkMonitorClipboard.UseVisualStyleBackColor = true;
|
||||
this.chkMonitorClipboard.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
|
||||
//
|
||||
// lblTitle
|
||||
//
|
||||
this.lblTitle.AutoSize = true;
|
||||
this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblTitle.ForeColor = System.Drawing.Color.DodgerBlue;
|
||||
this.lblTitle.Location = new System.Drawing.Point(26, 16);
|
||||
this.lblTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lblTitle.Name = "lblTitle";
|
||||
this.lblTitle.Size = new System.Drawing.Size(155, 30);
|
||||
this.lblTitle.TabIndex = 3;
|
||||
this.lblTitle.Text = "SharpClipboard";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.BackColor = System.Drawing.Color.White;
|
||||
this.panel1.Controls.Add(this.lblOptions);
|
||||
this.panel1.Controls.Add(this.grpLibrarySettings);
|
||||
this.panel1.Controls.Add(this.lblTitle);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(364, 458);
|
||||
this.panel1.TabIndex = 4;
|
||||
//
|
||||
// lblOptions
|
||||
//
|
||||
this.lblOptions.AutoSize = true;
|
||||
this.lblOptions.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblOptions.ForeColor = System.Drawing.Color.Black;
|
||||
this.lblOptions.Location = new System.Drawing.Point(175, 16);
|
||||
this.lblOptions.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lblOptions.Name = "lblOptions";
|
||||
this.lblOptions.Size = new System.Drawing.Size(86, 30);
|
||||
this.lblOptions.TabIndex = 6;
|
||||
this.lblOptions.Text = "Options";
|
||||
//
|
||||
// grpLibrarySettings
|
||||
//
|
||||
this.grpLibrarySettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpLibrarySettings.Controls.Add(this.grpObservableFormats);
|
||||
this.grpLibrarySettings.Controls.Add(this.chkMonitorClipboard);
|
||||
this.grpLibrarySettings.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.grpLibrarySettings.ForeColor = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.grpLibrarySettings.Location = new System.Drawing.Point(30, 66);
|
||||
this.grpLibrarySettings.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.grpLibrarySettings.Name = "grpLibrarySettings";
|
||||
this.grpLibrarySettings.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.grpLibrarySettings.Size = new System.Drawing.Size(304, 377);
|
||||
this.grpLibrarySettings.TabIndex = 5;
|
||||
this.grpLibrarySettings.TabStop = false;
|
||||
this.grpLibrarySettings.Text = "Change library settings";
|
||||
//
|
||||
// grpObservableFormats
|
||||
//
|
||||
this.grpObservableFormats.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableFilesDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveFiles);
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableImagesDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveImages);
|
||||
this.grpObservableFormats.Controls.Add(this.lblObservableTextsDesc);
|
||||
this.grpObservableFormats.Controls.Add(this.chkObserveTexts);
|
||||
this.grpObservableFormats.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.grpObservableFormats.ForeColor = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.grpObservableFormats.Location = new System.Drawing.Point(20, 85);
|
||||
this.grpObservableFormats.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.grpObservableFormats.Name = "grpObservableFormats";
|
||||
this.grpObservableFormats.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.grpObservableFormats.Size = new System.Drawing.Size(267, 275);
|
||||
this.grpObservableFormats.TabIndex = 6;
|
||||
this.grpObservableFormats.TabStop = false;
|
||||
this.grpObservableFormats.Text = "Observable Formats";
|
||||
//
|
||||
// lblObservableFilesDesc
|
||||
//
|
||||
this.lblObservableFilesDesc.AutoSize = true;
|
||||
this.lblObservableFilesDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblObservableFilesDesc.ForeColor = System.Drawing.Color.Gray;
|
||||
this.lblObservableFilesDesc.Location = new System.Drawing.Point(38, 212);
|
||||
this.lblObservableFilesDesc.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lblObservableFilesDesc.Name = "lblObservableFilesDesc";
|
||||
this.lblObservableFilesDesc.Size = new System.Drawing.Size(176, 30);
|
||||
this.lblObservableFilesDesc.TabIndex = 11;
|
||||
this.lblObservableFilesDesc.Text = "Monitors any files/directories \r\nthat are copied to the clipboard.";
|
||||
//
|
||||
// chkObserveFiles
|
||||
//
|
||||
this.chkObserveFiles.AutoSize = true;
|
||||
this.chkObserveFiles.Checked = true;
|
||||
this.chkObserveFiles.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveFiles.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.chkObserveFiles.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveFiles.Location = new System.Drawing.Point(20, 188);
|
||||
this.chkObserveFiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.chkObserveFiles.Name = "chkObserveFiles";
|
||||
this.chkObserveFiles.Size = new System.Drawing.Size(53, 21);
|
||||
this.chkObserveFiles.TabIndex = 10;
|
||||
this.chkObserveFiles.Text = "Files";
|
||||
this.chkObserveFiles.UseVisualStyleBackColor = true;
|
||||
this.chkObserveFiles.CheckedChanged += new System.EventHandler(this.chkObserveFiles_CheckedChanged);
|
||||
//
|
||||
// lblObservableImagesDesc
|
||||
//
|
||||
this.lblObservableImagesDesc.AutoSize = true;
|
||||
this.lblObservableImagesDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblObservableImagesDesc.ForeColor = System.Drawing.Color.Gray;
|
||||
this.lblObservableImagesDesc.Location = new System.Drawing.Point(38, 138);
|
||||
this.lblObservableImagesDesc.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lblObservableImagesDesc.Name = "lblObservableImagesDesc";
|
||||
this.lblObservableImagesDesc.Size = new System.Drawing.Size(164, 30);
|
||||
this.lblObservableImagesDesc.TabIndex = 9;
|
||||
this.lblObservableImagesDesc.Text = "Monitors any images that are \r\ncopied to the clipboard.";
|
||||
//
|
||||
// chkObserveImages
|
||||
//
|
||||
this.chkObserveImages.AutoSize = true;
|
||||
this.chkObserveImages.Checked = true;
|
||||
this.chkObserveImages.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveImages.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.chkObserveImages.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveImages.Location = new System.Drawing.Point(20, 114);
|
||||
this.chkObserveImages.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.chkObserveImages.Name = "chkObserveImages";
|
||||
this.chkObserveImages.Size = new System.Drawing.Size(71, 21);
|
||||
this.chkObserveImages.TabIndex = 8;
|
||||
this.chkObserveImages.Text = "Images";
|
||||
this.chkObserveImages.UseVisualStyleBackColor = true;
|
||||
this.chkObserveImages.CheckedChanged += new System.EventHandler(this.chkObserveImages_CheckedChanged);
|
||||
//
|
||||
// lblObservableTextsDesc
|
||||
//
|
||||
this.lblObservableTextsDesc.AutoSize = true;
|
||||
this.lblObservableTextsDesc.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.lblObservableTextsDesc.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.lblObservableTextsDesc.Location = new System.Drawing.Point(38, 62);
|
||||
this.lblObservableTextsDesc.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.lblObservableTextsDesc.Name = "lblObservableTextsDesc";
|
||||
this.lblObservableTextsDesc.Size = new System.Drawing.Size(151, 30);
|
||||
this.lblObservableTextsDesc.TabIndex = 7;
|
||||
this.lblObservableTextsDesc.Text = "Monitors any texts that are \r\ncopied to the clipboard.";
|
||||
//
|
||||
// chkObserveTexts
|
||||
//
|
||||
this.chkObserveTexts.AutoSize = true;
|
||||
this.chkObserveTexts.Checked = true;
|
||||
this.chkObserveTexts.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkObserveTexts.Font = new System.Drawing.Font("Segoe UI Semibold", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.chkObserveTexts.ForeColor = System.Drawing.Color.Black;
|
||||
this.chkObserveTexts.Location = new System.Drawing.Point(20, 38);
|
||||
this.chkObserveTexts.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.chkObserveTexts.Name = "chkObserveTexts";
|
||||
this.chkObserveTexts.Size = new System.Drawing.Size(58, 21);
|
||||
this.chkObserveTexts.TabIndex = 1;
|
||||
this.chkObserveTexts.Text = "Texts";
|
||||
this.chkObserveTexts.UseVisualStyleBackColor = true;
|
||||
this.chkObserveTexts.CheckedChanged += new System.EventHandler(this.chkObserveTexts_CheckedChanged);
|
||||
//
|
||||
// txtCopiedTexts
|
||||
//
|
||||
this.txtCopiedTexts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtCopiedTexts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.txtCopiedTexts.Location = new System.Drawing.Point(9, 80);
|
||||
this.txtCopiedTexts.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.txtCopiedTexts.Multiline = true;
|
||||
this.txtCopiedTexts.Name = "txtCopiedTexts";
|
||||
this.txtCopiedTexts.Size = new System.Drawing.Size(275, 362);
|
||||
this.txtCopiedTexts.TabIndex = 5;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.BackColor = System.Drawing.Color.Honeydew;
|
||||
this.panel2.Controls.Add(this.label1);
|
||||
this.panel2.Controls.Add(this.txtCopiedTexts);
|
||||
this.panel2.Controls.Add(this.label2);
|
||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel2.Location = new System.Drawing.Point(364, 0);
|
||||
this.panel2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.Size = new System.Drawing.Size(294, 458);
|
||||
this.panel2.TabIndex = 6;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.label1.ForeColor = System.Drawing.Color.Black;
|
||||
this.label1.Location = new System.Drawing.Point(29, 16);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(130, 30);
|
||||
this.label1.TabIndex = 7;
|
||||
this.label1.Text = "Copied Texts";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.label2.Location = new System.Drawing.Point(31, 50);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(99, 15);
|
||||
this.label2.TabIndex = 8;
|
||||
this.label2.Text = "will appear here...";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(234)))), ((int)(((byte)(255)))));
|
||||
this.panel3.Controls.Add(this.pbCopiedImage);
|
||||
this.panel3.Controls.Add(this.label3);
|
||||
this.panel3.Controls.Add(this.label4);
|
||||
this.panel3.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel3.Location = new System.Drawing.Point(658, 0);
|
||||
this.panel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.panel3.Name = "panel3";
|
||||
this.panel3.Size = new System.Drawing.Size(294, 458);
|
||||
this.panel3.TabIndex = 7;
|
||||
//
|
||||
// pbCopiedImage
|
||||
//
|
||||
this.pbCopiedImage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pbCopiedImage.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pbCopiedImage.Image = ((System.Drawing.Image)(resources.GetObject("pbCopiedImage.Image")));
|
||||
this.pbCopiedImage.Location = new System.Drawing.Point(8, 80);
|
||||
this.pbCopiedImage.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.pbCopiedImage.Name = "pbCopiedImage";
|
||||
this.pbCopiedImage.Size = new System.Drawing.Size(276, 361);
|
||||
this.pbCopiedImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pbCopiedImage.TabIndex = 9;
|
||||
this.pbCopiedImage.TabStop = false;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.label3.ForeColor = System.Drawing.Color.Black;
|
||||
this.label3.Location = new System.Drawing.Point(29, 16);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(163, 30);
|
||||
this.label3.TabIndex = 7;
|
||||
this.label3.Text = "Copied Image(s)";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.label4.Location = new System.Drawing.Point(31, 50);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(99, 15);
|
||||
this.label4.TabIndex = 8;
|
||||
this.label4.Text = "will appear here...";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.panel4.BackColor = System.Drawing.Color.Ivory;
|
||||
this.panel4.Controls.Add(this.lstCopiedFiles);
|
||||
this.panel4.Controls.Add(this.label5);
|
||||
this.panel4.Controls.Add(this.label6);
|
||||
this.panel4.Location = new System.Drawing.Point(952, 0);
|
||||
this.panel4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.panel4.Name = "panel4";
|
||||
this.panel4.Size = new System.Drawing.Size(294, 458);
|
||||
this.panel4.TabIndex = 8;
|
||||
//
|
||||
// lstCopiedFiles
|
||||
//
|
||||
this.lstCopiedFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lstCopiedFiles.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.lstCopiedFiles.FormattingEnabled = true;
|
||||
this.lstCopiedFiles.HorizontalScrollbar = true;
|
||||
this.lstCopiedFiles.ItemHeight = 15;
|
||||
this.lstCopiedFiles.Location = new System.Drawing.Point(9, 80);
|
||||
this.lstCopiedFiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.lstCopiedFiles.Name = "lstCopiedFiles";
|
||||
this.lstCopiedFiles.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
|
||||
this.lstCopiedFiles.Size = new System.Drawing.Size(275, 362);
|
||||
this.lstCopiedFiles.TabIndex = 11;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
this.label5.ForeColor = System.Drawing.Color.Black;
|
||||
this.label5.Location = new System.Drawing.Point(29, 16);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(136, 30);
|
||||
this.label5.TabIndex = 7;
|
||||
this.label5.Text = "Copied File(s)";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.label6.Location = new System.Drawing.Point(31, 50);
|
||||
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(99, 15);
|
||||
this.label6.TabIndex = 8;
|
||||
this.label6.Text = "will appear here...";
|
||||
//
|
||||
// sharpClipboard1
|
||||
//
|
||||
this.sharpClipboard1.MonitorClipboard = true;
|
||||
this.sharpClipboard1.ObservableFormats.All = true;
|
||||
this.sharpClipboard1.ObservableFormats.Files = true;
|
||||
this.sharpClipboard1.ObservableFormats.Images = true;
|
||||
this.sharpClipboard1.ObservableFormats.Others = true;
|
||||
this.sharpClipboard1.ObservableFormats.Texts = true;
|
||||
this.sharpClipboard1.ObserveLastEntry = true;
|
||||
this.sharpClipboard1.Tag = null;
|
||||
this.sharpClipboard1.ClipboardChanged += new System.EventHandler<WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs>(this.sharpClipboard1_ClipboardChanged);
|
||||
this.sharpClipboard1.MonitorClipboardChanged += new System.EventHandler<System.EventArgs>(this.sharpClipboard1_MonitorClipboardChanged);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1246, 458);
|
||||
this.Controls.Add(this.panel4);
|
||||
this.Controls.Add(this.panel3);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.Name = "MainForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "SharpClipboard: Tests";
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.grpLibrarySettings.ResumeLayout(false);
|
||||
this.grpLibrarySettings.PerformLayout();
|
||||
this.grpObservableFormats.ResumeLayout(false);
|
||||
this.grpObservableFormats.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel2.PerformLayout();
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pbCopiedImage)).EndInit();
|
||||
this.panel4.ResumeLayout(false);
|
||||
this.panel4.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private SharpClipboard sharpClipboard1;
|
||||
private System.Windows.Forms.CheckBox chkMonitorClipboard;
|
||||
private System.Windows.Forms.Label lblTitle;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.GroupBox grpLibrarySettings;
|
||||
private System.Windows.Forms.GroupBox grpObservableFormats;
|
||||
private System.Windows.Forms.CheckBox chkObserveTexts;
|
||||
private System.Windows.Forms.Label lblOptions;
|
||||
private System.Windows.Forms.Label lblObservableFilesDesc;
|
||||
private System.Windows.Forms.CheckBox chkObserveFiles;
|
||||
private System.Windows.Forms.Label lblObservableImagesDesc;
|
||||
private System.Windows.Forms.CheckBox chkObserveImages;
|
||||
private System.Windows.Forms.Label lblObservableTextsDesc;
|
||||
private System.Windows.Forms.TextBox txtCopiedTexts;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.PictureBox pbCopiedImage;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.ListBox lstCopiedFiles;
|
||||
}
|
||||
}
|
||||
|
||||
129
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.cs
Normal file
129
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.cs
Normal file
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using WK.Libraries.SharpClipboardNS;
|
||||
|
||||
namespace SharpClipboardPreview.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// The main application window.
|
||||
/// </summary>
|
||||
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<string> files = new List<string>();
|
||||
|
||||
// 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<string>)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
|
||||
}
|
||||
}
|
||||
306
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.resx
Normal file
306
SharpClipboard/SharpClipboard.Tests.WinForms/MainForm.resx
Normal file
@@ -0,0 +1,306 @@
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||
<data name="pbCopiedImage.Image" type="System.Drawing.Bitmap, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
ACAXk5OTb1TzI8oni/Bx9913P3dpaeleNSgAIHX33HPPzF133fUMNT+ifLIIH2HHHxgcHDyn3W5ft7a2
|
||||
9vdqgABAYp4I892Hp6endx04cOBr77zzTjk/onyyCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAA
|
||||
IG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggA
|
||||
ANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosA
|
||||
ACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbII
|
||||
AADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaL
|
||||
AAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2y
|
||||
CAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANIm
|
||||
iwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBt
|
||||
sggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADS
|
||||
JosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAg
|
||||
bbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA
|
||||
0iaLAAAgbbIIAADSJosAACBtsggAANImiwAAIG2yCAAA0iaLAAAgbbIIAADSJosAACBtsggAANImiwAA
|
||||
IG2yCAAA0iaLAAAgZV8Z+H8/k+/WS0mpwAAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
|
||||
<value>65</value>
|
||||
</metadata>
|
||||
</root>
|
||||
19
SharpClipboard/SharpClipboard.Tests.WinForms/Program.cs
Normal file
19
SharpClipboard/SharpClipboard.Tests.WinForms/Program.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace SharpClipboardPreview.Tests
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("SharpClipboard Tests")]
|
||||
[assembly: AssemblyDescription("A testing project for the SharpClipboard library.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Willy Kimura")]
|
||||
[assembly: AssemblyProduct("SharpCliboard - Testing Project")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019, Willy Kimura.")]
|
||||
[assembly: AssemblyTrademark("A product of Willy Kimura.")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("86f8eac7-259d-4a2f-842d-aa93163293c0")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
63
SharpClipboard/SharpClipboard.Tests.WinForms/Properties/Resources.Designer.cs
generated
Normal file
63
SharpClipboard/SharpClipboard.Tests.WinForms/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace SharpClipboardPreview.Tests.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SharpClipboardPreview.Tests.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
26
SharpClipboard/SharpClipboard.Tests.WinForms/Properties/Settings.Designer.cs
generated
Normal file
26
SharpClipboard/SharpClipboard.Tests.WinForms/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,26 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace SharpClipboardPreview.Tests.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
@@ -0,0 +1,45 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFrameworks>netcoreapp3.0;net20</TargetFrameworks>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<RootNamespace>SharpClipboardPreview.Tests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net20' ">
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing.Design" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SharpClipboard\SharpClipboard.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Properties\Settings.Designer.cs">
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
37
SharpClipboard/SharpClipboard.sln
Normal file
37
SharpClipboard/SharpClipboard.sln
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30002.166
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpClipboard", "SharpClipboard\SharpClipboard.csproj", "{005C3326-D638-4113-AEBB-A83433CC015E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpClipboard.Tests.WinForms", "SharpClipboard.Tests.WinForms\SharpClipboard.Tests.WinForms.csproj", "{86F8EAC7-259D-4A2F-842D-AA93163293C0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpClipboard.Tests.NetCoreWinForms", "SharpClipboard.Tests.NetCoreWinForms\SharpClipboard.Tests.NetCoreWinForms.csproj", "{D73E5EB1-DC2F-46E2-A30D-D76ECF2C4A07}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{005C3326-D638-4113-AEBB-A83433CC015E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{005C3326-D638-4113-AEBB-A83433CC015E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{005C3326-D638-4113-AEBB-A83433CC015E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{005C3326-D638-4113-AEBB-A83433CC015E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{86F8EAC7-259D-4A2F-842D-AA93163293C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{86F8EAC7-259D-4A2F-842D-AA93163293C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{86F8EAC7-259D-4A2F-842D-AA93163293C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{86F8EAC7-259D-4A2F-842D-AA93163293C0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D73E5EB1-DC2F-46E2-A30D-D76ECF2C4A07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D73E5EB1-DC2F-46E2-A30D-D76ECF2C4A07}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D73E5EB1-DC2F-46E2-A30D-D76ECF2C4A07}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D73E5EB1-DC2F-46E2-A30D-D76ECF2C4A07}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8D4EE96B-783A-40A6-ACB6-75B1ABB152B6}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
36
SharpClipboard/SharpClipboard/Properties/AssemblyInfo.cs
Normal file
36
SharpClipboard/SharpClipboard/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("SharpClipboard - A library for anonymously monitoring clipboard entries.")]
|
||||
[assembly: AssemblyDescription("SharpClipboard is a clipboard-monitoring library for .NET that listens to the system's clipboard entries, allowing developers to tap into the rich capabilities of determining the clipboard's contents at runtime.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Willy Kimura")]
|
||||
[assembly: AssemblyProduct("SharpClipboard - Clipboard Monitoring Library")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020, Willy Kimura.")]
|
||||
[assembly: AssemblyTrademark("A product of Willy Kimura.")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("005c3326-d638-4113-aebb-a83433cc015e")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.5.2.0")]
|
||||
[assembly: AssemblyFileVersion("3.5.2.0")]
|
||||
63
SharpClipboard/SharpClipboard/Properties/Resources.Designer.cs
generated
Normal file
63
SharpClipboard/SharpClipboard/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace WK.Libraries.SharpClipboardNS.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WK.Libraries.SharpClipboardNS.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
120
SharpClipboard/SharpClipboard/Properties/Resources.resx
Normal file
120
SharpClipboard/SharpClipboard/Properties/Resources.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
36
SharpClipboard/SharpClipboard/SharpClipboard.Designer.cs
generated
Normal file
36
SharpClipboard/SharpClipboard/SharpClipboard.Designer.cs
generated
Normal file
@@ -0,0 +1,36 @@
|
||||
namespace WK.Libraries.SharpClipboardNS
|
||||
{
|
||||
partial class SharpClipboard
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
729
SharpClipboard/SharpClipboard/SharpClipboard.cs
Normal file
729
SharpClipboard/SharpClipboard/SharpClipboard.cs
Normal file
@@ -0,0 +1,729 @@
|
||||
#region Copyright
|
||||
|
||||
/*
|
||||
* Developer : Willy Kimura (WK).
|
||||
* Library : SharpCliboard.
|
||||
* License : MIT.
|
||||
*
|
||||
* This handy library was designed to assist .NET developers
|
||||
* monitor the system cliboard in an easier and pluggable
|
||||
* fashion that before. It provides support for detecting
|
||||
* data formats including texts, images & files. To use it
|
||||
* at design-time, simply add the component in the Toolbox
|
||||
* then drag-n-drop it inside your Form to customize its
|
||||
* options and features. Improvements are always welcome.
|
||||
*
|
||||
*/
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Design;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using WK.Libraries.SharpClipboardNS.Views;
|
||||
|
||||
namespace WK.Libraries.SharpClipboardNS
|
||||
{
|
||||
/// <summary>
|
||||
/// Assists in anonymously monitoring the system clipboard by
|
||||
/// detecting any copied/cut data and the type of data it is.
|
||||
/// </summary>
|
||||
[Designer(typeof(WKDesigner))]
|
||||
[DefaultEvent("ClipboardChanged")]
|
||||
[DefaultProperty("MonitorClipboard")]
|
||||
[Description("Assists in anonymously monitoring the system clipboard by " +
|
||||
"detecting any copied/cut data and the type of data it is.")]
|
||||
public partial class SharpClipboard : Component
|
||||
{
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of <see cref="SharpClipboard"/>.
|
||||
/// </summary>
|
||||
public SharpClipboard()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
SetDefaults();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of <see cref="SharpClipboard"/>.
|
||||
/// </summary>
|
||||
/// <param name="container">
|
||||
/// The container hosting the component.
|
||||
/// </param>
|
||||
public SharpClipboard(IContainer container)
|
||||
{
|
||||
container.Add(this);
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
SetDefaults();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private bool _monitorClipboard;
|
||||
private bool _observeLastEntry;
|
||||
|
||||
private Timer _timer = new Timer();
|
||||
private ClipboardHandle _handle = new ClipboardHandle();
|
||||
private ObservableDataFormats _observableFormats = new ObservableDataFormats();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Enumerations
|
||||
|
||||
/// <summary>
|
||||
/// Provides a list of the supported clipboard content types.
|
||||
/// </summary>
|
||||
public enum ContentTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents <see cref="String"/> content.
|
||||
/// </summary>
|
||||
Text = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Represents <see cref="Image"/> content.
|
||||
/// </summary>
|
||||
Image = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Represents content as a <see cref="List{string}"/> of files.
|
||||
/// </summary>
|
||||
Files = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Represents any complex objects.
|
||||
/// </summary>
|
||||
Other = 3
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
#region Browsable
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the clipboard
|
||||
/// will be monitored once the application launches.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether the clipboard " +
|
||||
"will be monitored once the application launches.")]
|
||||
public bool MonitorClipboard
|
||||
{
|
||||
get { return _monitorClipboard; }
|
||||
set {
|
||||
|
||||
_monitorClipboard = value;
|
||||
MonitorClipboardChanged?.Invoke(this, EventArgs.Empty);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When set to true, the last cut/copied clipboard item will
|
||||
/// not be auto-picked once monitoring is enabled. However when
|
||||
/// set to false, the last cut/copied clipboard item will be
|
||||
/// auto-picked once monitoring is enabled.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("When set to true, the last cut/copied clipboard item will " +
|
||||
"be auto-picked once monitoring is enabled. However when " +
|
||||
"set to false, the last cut/copied clipboard item will not " +
|
||||
"be auto-picked once monitoring is enabled.")]
|
||||
public bool ObserveLastEntry
|
||||
{
|
||||
get { return _observeLastEntry; }
|
||||
set {
|
||||
|
||||
_observeLastEntry = value;
|
||||
ObserveLastEntryChanged?.Invoke(this, EventArgs.Empty);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the data formats that will be observed
|
||||
/// or monitored when cut/copy actions are triggered.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets the data formats that will be observed " +
|
||||
"or monitored when cut/copy actions are triggered.")]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
public ObservableDataFormats ObservableFormats
|
||||
{
|
||||
get { return _observableFormats; }
|
||||
set {
|
||||
|
||||
_observableFormats = value;
|
||||
ObservableFormatsChanged?.Invoke(this, EventArgs.Empty);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the object that contains programmer-
|
||||
/// supplied data associated with the component.
|
||||
/// </summary>
|
||||
[Bindable(true)]
|
||||
[Category("#Clipboard: Miscellaneous")]
|
||||
[TypeConverter(typeof(StringConverter))]
|
||||
[Description("Sets the object that contains programmer-" +
|
||||
"supplied data associated with the component.")]
|
||||
public virtual object Tag { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Non-browsable
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently cut/copied clipboard text.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public string ClipboardText { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently cut/copied clipboard <see cref="object"/>.
|
||||
/// This is necessary when handling complex content copied to the clipboard.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public object ClipboardObject { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently cut/copied clipboard file-path.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public string ClipboardFile { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently cut/copied clipboard file-paths.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public List<string> ClipboardFiles { get; internal set; } = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently cut/copied clipboard image.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public Image ClipboardImage { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Lets you change the invisible clipboard-window-handle's title
|
||||
/// that is designed to receive broadcasted clipboard messages. This is
|
||||
/// however unnecessary for normal users but may be essential if you're
|
||||
/// working under special circumstances that require supervision.
|
||||
/// The window will however remain hidden from all users.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
public static string HandleCaption { get; set; } = string.Empty;
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
#region Public
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current foreground window's handle.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IntPtr ForegroundWindowHandle()
|
||||
{
|
||||
return GetForegroundWindow();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the clipboard-monitoring process and
|
||||
/// initializes the system clipboard-access handle.
|
||||
/// </summary>
|
||||
public void StartMonitoring()
|
||||
{
|
||||
_handle.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ends the clipboard-monitoring process and
|
||||
/// shuts the system clipboard-access handle.
|
||||
/// </summary>
|
||||
public void StopMonitoring()
|
||||
{
|
||||
_handle.Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private
|
||||
|
||||
/// <summary>
|
||||
/// Apply library-default settings and launch code.
|
||||
/// </summary>
|
||||
private void SetDefaults()
|
||||
{
|
||||
_handle.SharpClipboardInstance = this;
|
||||
|
||||
_timer.Enabled = true;
|
||||
_timer.Interval = 1000;
|
||||
_timer.Tick += OnLoad;
|
||||
|
||||
MonitorClipboard = true;
|
||||
ObserveLastEntry = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes the <see cref="ClipboardChanged"/> event with formal parameters.
|
||||
/// </summary>
|
||||
/// <param name="content">The current clipboard content.</param>
|
||||
/// <param name="type">The current clipboard content-type.</param>
|
||||
internal void Invoke(object content, ContentTypes type, SourceApplication source)
|
||||
{
|
||||
ClipboardChanged?.Invoke(this, new ClipboardChangedEventArgs(content, type, source));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the foreground or currently active window handle.
|
||||
/// </summary>
|
||||
[DllImport("user32.dll")]
|
||||
static extern IntPtr GetForegroundWindow();
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
#region Public
|
||||
|
||||
#region Event Handlers
|
||||
|
||||
/// <summary>
|
||||
/// This event is triggered whenever the
|
||||
/// system clipboard has been modified.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Events")]
|
||||
[Description("This event is triggered whenever the " +
|
||||
"system clipboard has been modified.")]
|
||||
public event EventHandler<ClipboardChangedEventArgs> ClipboardChanged = null;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs whenever the clipboard-monitoring status has been changed.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Events")]
|
||||
[Description("Occurs whenever the clipboard-monitoring status has been changed.")]
|
||||
public event EventHandler<EventArgs> MonitorClipboardChanged = null;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs whenever the allowed observable formats have been changed.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Events")]
|
||||
[Description("Occurs whenever the allowed observable formats have been changed.")]
|
||||
public event EventHandler<EventArgs> ObservableFormatsChanged = null;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs whenever the 'ObserveLastEntry' property has been changed.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Events")]
|
||||
[Description("Occurs whenever the allowed observable formats have been changed.")]
|
||||
public event EventHandler<EventArgs> ObserveLastEntryChanged = null;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Event Arguments
|
||||
|
||||
/// <summary>
|
||||
/// Provides data for the <see cref="ClipboardChanged"/> event.
|
||||
/// </summary>
|
||||
public class ClipboardChangedEventArgs : EventArgs
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
/// <summary>
|
||||
/// Provides data for the <see cref="ClipboardChanged"/> event.
|
||||
/// </summary>
|
||||
/// <param name="content">The current clipboard content.</param>
|
||||
/// <param name="contentType">The current clipboard-content-type.</param>
|
||||
public ClipboardChangedEventArgs(object content, ContentTypes contentType, SourceApplication source)
|
||||
{
|
||||
Content = content;
|
||||
ContentType = contentType;
|
||||
|
||||
_source = new SourceApplication(source.ID, source.Handle, source.Name,
|
||||
source.Title, source.Path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private SourceApplication _source;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently copied clipboard content.
|
||||
/// </summary>
|
||||
public object Content { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently copied clipboard content-type.
|
||||
/// </summary>
|
||||
public ContentTypes ContentType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application from where the
|
||||
/// clipboard's content were copied.
|
||||
/// </summary>
|
||||
public SourceApplication SourceApplication
|
||||
{
|
||||
get { return _source; }
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private
|
||||
|
||||
/// <summary>
|
||||
/// This initiates a Timer that then begins the
|
||||
/// clipboard-monitoring service. The Timer will
|
||||
/// auto-shutdown once the service has started.
|
||||
/// </summary>
|
||||
private void OnLoad(object sender, EventArgs e)
|
||||
{
|
||||
if (!DesignMode)
|
||||
{
|
||||
_timer.Stop();
|
||||
_timer.Enabled = false;
|
||||
|
||||
StartMonitoring();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Smart Tags
|
||||
|
||||
#region Standard: Designer
|
||||
|
||||
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
|
||||
public class WKDesigner : ComponentDesigner
|
||||
{
|
||||
private DesignerActionListCollection actionLists;
|
||||
|
||||
// Use pull model to populate smart tag menu.
|
||||
public override DesignerActionListCollection ActionLists
|
||||
{
|
||||
get {
|
||||
if (null == actionLists)
|
||||
{
|
||||
actionLists = new DesignerActionListCollection
|
||||
{
|
||||
new WKComponentActionList(this.Component)
|
||||
};
|
||||
}
|
||||
|
||||
return actionLists;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Modifiers: Properties
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WKComponentActionList"/> class.
|
||||
/// </summary>
|
||||
public class WKComponentActionList : DesignerActionList
|
||||
{
|
||||
private SharpClipboard WKComponent;
|
||||
private DesignerActionUIService designerActionUISvc = null;
|
||||
|
||||
public WKComponentActionList(IComponent component) : base(component)
|
||||
{
|
||||
this.WKComponent = component as SharpClipboard;
|
||||
|
||||
// Cache a reference to DesignerActionUIService so
|
||||
// that the DesignerActionList can be refreshed.
|
||||
this.designerActionUISvc = GetService(typeof(DesignerActionUIService))
|
||||
as DesignerActionUIService;
|
||||
|
||||
// Automatically display Smart Tags for quick access
|
||||
// to the most common properties needed by users.
|
||||
this.AutoShow = true;
|
||||
}
|
||||
|
||||
#region Properties Manager
|
||||
|
||||
internal static PropertyDescriptor GetPropertyDescriptor(IComponent component, string propertyName)
|
||||
{
|
||||
return TypeDescriptor.GetProperties(component)[propertyName];
|
||||
}
|
||||
|
||||
internal static IDesignerHost GetDesignerHost(IComponent component)
|
||||
{
|
||||
return (IDesignerHost)component.Site.GetService(typeof(IDesignerHost));
|
||||
}
|
||||
|
||||
internal static IComponentChangeService GetChangeService(IComponent component)
|
||||
{
|
||||
return (IComponentChangeService)component.Site.GetService(typeof(IComponentChangeService));
|
||||
}
|
||||
|
||||
internal static void SetValue(IComponent component, string propertyName, object value)
|
||||
{
|
||||
PropertyDescriptor propertyDescriptor = GetPropertyDescriptor(component, propertyName);
|
||||
IComponentChangeService svc = GetChangeService(component);
|
||||
IDesignerHost host = GetDesignerHost(component);
|
||||
DesignerTransaction txn = host.CreateTransaction();
|
||||
|
||||
try
|
||||
{
|
||||
svc.OnComponentChanging(component, propertyDescriptor);
|
||||
propertyDescriptor.SetValue(component, value);
|
||||
svc.OnComponentChanged(component, propertyDescriptor, null, null);
|
||||
txn.Commit();
|
||||
txn = null;
|
||||
}
|
||||
|
||||
finally
|
||||
{
|
||||
if (txn != null)
|
||||
txn.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Items Manager
|
||||
|
||||
/// <summary>
|
||||
/// Implementation of this abstract method creates Smart Tag items,
|
||||
/// associates their targets, and collects them into a list.
|
||||
/// </summary>
|
||||
public override DesignerActionItemCollection GetSortedActionItems()
|
||||
{
|
||||
DesignerActionItemCollection items = new DesignerActionItemCollection
|
||||
{
|
||||
// Define static section header entries.
|
||||
new DesignerActionHeaderItem("Behaviour"),
|
||||
|
||||
// Add Designer items.
|
||||
new DesignerActionPropertyItem("MonitorClipboard",
|
||||
"Monitor Clipboard", "Behaviour",
|
||||
GetPropertyDescriptor(this.Component, "MonitorClipboard").Description)
|
||||
|
||||
};
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
#region Properties
|
||||
|
||||
public bool MonitorClipboard
|
||||
{
|
||||
get { return WKComponent.MonitorClipboard; }
|
||||
set { SetValue(WKComponent, "MonitorClipboard", value); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region Property Classes
|
||||
|
||||
/// <summary>
|
||||
/// Provides a list of supported observable data formats
|
||||
/// that can be monitored from the system clipboard.
|
||||
/// </summary>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
[TypeConverter(typeof(ExpandableObjectConverter))]
|
||||
[Description("Provides a list of supported observable data formats " +
|
||||
"that can be monitored from the system clipboard.")]
|
||||
public class ObservableDataFormats
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="ObservableDataFormats"/> options class-instance.
|
||||
/// </summary>
|
||||
public ObservableDataFormats()
|
||||
{
|
||||
_all = true;
|
||||
}
|
||||
|
||||
#region Fields
|
||||
|
||||
private bool _all;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether all the
|
||||
/// supported observable formats will be monitored.
|
||||
/// </summary>
|
||||
[ParenthesizePropertyName(true)]
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether all the supported " +
|
||||
"observable formats will be monitored.")]
|
||||
public bool All
|
||||
{
|
||||
get { return _all; }
|
||||
set {
|
||||
|
||||
_all = value;
|
||||
|
||||
Texts = value;
|
||||
Files = value;
|
||||
Images = value;
|
||||
Others = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether texts will be monitored.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether texts will be monitored.")]
|
||||
public bool Texts { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether files will be monitored.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether files will be monitored.")]
|
||||
public bool Files { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether images will be monitored.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether images will be monitored.")]
|
||||
public bool Images { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether other
|
||||
/// complex object-types will be monitored.
|
||||
/// </summary>
|
||||
[Category("#Clipboard: Behaviour")]
|
||||
[Description("Sets a value indicating whether other " +
|
||||
"complex object-types will be monitored.")]
|
||||
public bool Others { get; set; } = true;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="string"/> containing the list of observable data
|
||||
/// formats provided and their applied statuses separated by semi-colons.
|
||||
/// </summary>
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Texts: {Texts}; Images: {Images}; Files: {Files}; Others: {Others}";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stores details of the application from
|
||||
/// where the clipboard's content were copied.
|
||||
/// </summary>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public class SourceApplication
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="SourceApplication"/> class-instance.
|
||||
/// </summary>
|
||||
/// <param name="id">The application's ID.</param>
|
||||
/// <param name="handle">The application's handle.</param>
|
||||
/// <param name="name">The application's name.</param>
|
||||
/// <param name="title">The application's title.</param>
|
||||
/// <param name="path">The application's path.</param>
|
||||
internal SourceApplication(int id, IntPtr handle, string name,
|
||||
string title, string path)
|
||||
{
|
||||
ID = id;
|
||||
Name = name;
|
||||
Path = path;
|
||||
Title = title;
|
||||
Handle = handle;
|
||||
}
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application's process-ID.
|
||||
/// </summary>
|
||||
public int ID { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the appliation's window-handle.
|
||||
/// </summary>
|
||||
public IntPtr Handle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application's name.
|
||||
/// </summary>
|
||||
public string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application's title-text.
|
||||
/// </summary>
|
||||
public string Title { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application's absolute path.
|
||||
/// </summary>
|
||||
public string Path { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="string"/> containing the list
|
||||
/// of application details provided.
|
||||
/// </summary>
|
||||
public override string ToString()
|
||||
{
|
||||
return $"ID: {ID}; Handle: {Handle}, Name: {Name}; " +
|
||||
$"Title: {Title}; Path: {Path}";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
58
SharpClipboard/SharpClipboard/SharpClipboard.csproj
Normal file
58
SharpClipboard/SharpClipboard/SharpClipboard.csproj
Normal file
@@ -0,0 +1,58 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||
<PropertyGroup>
|
||||
<RootNamespace>WK.Libraries.SharpClipboardNS</RootNamespace>
|
||||
<TargetFrameworks>netcoreapp3.0;net20</TargetFrameworks>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Version>3.5.0</Version>
|
||||
<Authors>WillyKimura</Authors>
|
||||
<Company />
|
||||
<Product />
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PackageProjectUrl>https://github.com/Willy-Kimura/SharpClipboard</PackageProjectUrl>
|
||||
<PackageIconUrl></PackageIconUrl>
|
||||
<Description>SharpClipboard is a clipboard-monitoring library for .NET that listens to the system's clipboard entries, allowing developers to tap into the rich capabilities of determining the clipboard's contents at runtime.</Description>
|
||||
<PackageReleaseNotes>- The 'ClipboardFiles' property will now be cleared upon copying files.
|
||||
- Prevented crashing when performing a clipboard operation in Remote Desktop environments.</PackageReleaseNotes>
|
||||
<Copyright>© 2020 Willy Kimura</Copyright>
|
||||
<PackageTags>c# vb clipboard monitor clipboard-monitor clipboard-manager clipboard-history</PackageTags>
|
||||
<PackageIcon>clipboard.png</PackageIcon>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<RepositoryUrl>https://github.com/Willy-Kimura/SharpClipboard.git</RepositoryUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<DocumentationFile>SharpClipboard.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<DocumentationFile>SharpClipboard.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net20' ">
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing.Design" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="..\Assets\clipboard.png" Pack="true" PackagePath="" Link="Assets\clipboard.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Assets\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
396
SharpClipboard/SharpClipboard/SharpClipboard.xml
Normal file
396
SharpClipboard/SharpClipboard/SharpClipboard.xml
Normal file
@@ -0,0 +1,396 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>SharpClipboard</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.Properties.Resources">
|
||||
<summary>
|
||||
A strongly-typed resource class, for looking up localized strings, etc.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.Properties.Resources.ResourceManager">
|
||||
<summary>
|
||||
Returns the cached ResourceManager instance used by this class.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.Properties.Resources.Culture">
|
||||
<summary>
|
||||
Overrides the current thread's CurrentUICulture property for all
|
||||
resource lookups using this strongly typed resource class.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.SharpClipboard">
|
||||
<summary>
|
||||
Assists in anonymously monitoring the system clipboard by
|
||||
detecting any copied/cut data and the type of data it is.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.#ctor">
|
||||
<summary>
|
||||
Initializes a new instance of <see cref="T:WK.Libraries.SharpClipboardNS.SharpClipboard"/>.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.#ctor(System.ComponentModel.IContainer)">
|
||||
<summary>
|
||||
Initializes a new instance of <see cref="T:WK.Libraries.SharpClipboardNS.SharpClipboard"/>.
|
||||
</summary>
|
||||
<param name="container">
|
||||
The container hosting the component.
|
||||
</param>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes">
|
||||
<summary>
|
||||
Provides a list of the supported clipboard content types.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Text">
|
||||
<summary>
|
||||
Represents <see cref="T:System.String"/> content.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Image">
|
||||
<summary>
|
||||
Represents <see cref="F:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Image"/> content.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Files">
|
||||
<summary>
|
||||
Represents content as a <see cref="!:List<string>"/> of files.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes.Other">
|
||||
<summary>
|
||||
Represents any complex objects.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.MonitorClipboard">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether the clipboard
|
||||
will be monitored once the application launches.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ObserveLastEntry">
|
||||
<summary>
|
||||
When set to true, the last cut/copied clipboard item will
|
||||
not be auto-picked once monitoring is enabled. However when
|
||||
set to false, the last cut/copied clipboard item will be
|
||||
auto-picked once monitoring is enabled.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ObservableFormats">
|
||||
<summary>
|
||||
Gets or sets the data formats that will be observed
|
||||
or monitored when cut/copy actions are triggered.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.Tag">
|
||||
<summary>
|
||||
Gets or sets the object that contains programmer-
|
||||
supplied data associated with the component.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardText">
|
||||
<summary>
|
||||
Gets the currently cut/copied clipboard text.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardObject">
|
||||
<summary>
|
||||
Gets the currently cut/copied clipboard <see cref="T:System.Object"/>.
|
||||
This is necessary when handling complex content copied to the clipboard.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardFile">
|
||||
<summary>
|
||||
Gets the currently cut/copied clipboard file-path.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardFiles">
|
||||
<summary>
|
||||
Gets the currently cut/copied clipboard file-paths.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardImage">
|
||||
<summary>
|
||||
Gets the currently cut/copied clipboard image.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.HandleCaption">
|
||||
<summary>
|
||||
Lets you change the invisible clipboard-window-handle's title
|
||||
that is designed to receive broadcasted clipboard messages. This is
|
||||
however unnecessary for normal users but may be essential if you're
|
||||
working under special circumstances that require supervision.
|
||||
The window will however remain hidden from all users.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.ForegroundWindowHandle">
|
||||
<summary>
|
||||
Gets the current foreground window's handle.
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.StartMonitoring">
|
||||
<summary>
|
||||
Starts the clipboard-monitoring process and
|
||||
initializes the system clipboard-access handle.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.StopMonitoring">
|
||||
<summary>
|
||||
Ends the clipboard-monitoring process and
|
||||
shuts the system clipboard-access handle.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.SetDefaults">
|
||||
<summary>
|
||||
Apply library-default settings and launch code.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.Invoke(System.Object,WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes,WK.Libraries.SharpClipboardNS.SourceApplication)">
|
||||
<summary>
|
||||
Invokes the <see cref="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChanged"/> event with formal parameters.
|
||||
</summary>
|
||||
<param name="content">The current clipboard content.</param>
|
||||
<param name="type">The current clipboard content-type.</param>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.GetForegroundWindow">
|
||||
<summary>
|
||||
Gets the foreground or currently active window handle.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChanged">
|
||||
<summary>
|
||||
This event is triggered whenever the
|
||||
system clipboard has been modified.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:WK.Libraries.SharpClipboardNS.SharpClipboard.MonitorClipboardChanged">
|
||||
<summary>
|
||||
Occurs whenever the clipboard-monitoring status has been changed.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ObservableFormatsChanged">
|
||||
<summary>
|
||||
Occurs whenever the allowed observable formats have been changed.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ObserveLastEntryChanged">
|
||||
<summary>
|
||||
Occurs whenever the 'ObserveLastEntry' property has been changed.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs">
|
||||
<summary>
|
||||
Provides data for the <see cref="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChanged"/> event.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs.#ctor(System.Object,WK.Libraries.SharpClipboardNS.SharpClipboard.ContentTypes,WK.Libraries.SharpClipboardNS.SourceApplication)">
|
||||
<summary>
|
||||
Provides data for the <see cref="E:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChanged"/> event.
|
||||
</summary>
|
||||
<param name="content">The current clipboard content.</param>
|
||||
<param name="contentType">The current clipboard-content-type.</param>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs.Content">
|
||||
<summary>
|
||||
Gets the currently copied clipboard content.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs.ContentType">
|
||||
<summary>
|
||||
Gets the currently copied clipboard content-type.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SharpClipboard.ClipboardChangedEventArgs.SourceApplication">
|
||||
<summary>
|
||||
Gets the application from where the
|
||||
clipboard's content were copied.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.OnLoad(System.Object,System.EventArgs)">
|
||||
<summary>
|
||||
This initiates a Timer that then begins the
|
||||
clipboard-monitoring service. The Timer will
|
||||
auto-shutdown once the service has started.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.SharpClipboard.WKComponentActionList">
|
||||
<summary>
|
||||
Initializes a new instance of the <see cref="T:WK.Libraries.SharpClipboardNS.SharpClipboard.WKComponentActionList"/> class.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.WKComponentActionList.GetSortedActionItems">
|
||||
<summary>
|
||||
Implementation of this abstract method creates Smart Tag items,
|
||||
associates their targets, and collects them into a list.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.SharpClipboard.components">
|
||||
<summary>
|
||||
Required designer variable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.Dispose(System.Boolean)">
|
||||
<summary>
|
||||
Clean up any resources being used.
|
||||
</summary>
|
||||
<param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SharpClipboard.InitializeComponent">
|
||||
<summary>
|
||||
Required method for Designer support - do not modify
|
||||
the contents of this method with the code editor.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.ObservableDataFormats">
|
||||
<summary>
|
||||
Provides a list of supported observable data formats
|
||||
that can be monitored from the system clipboard.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.ObservableDataFormats.#ctor">
|
||||
<summary>
|
||||
Creates a new <see cref="T:WK.Libraries.SharpClipboardNS.ObservableDataFormats"/> options class-instance.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.ObservableDataFormats.All">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether all the
|
||||
supported observable formats will be monitored.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.ObservableDataFormats.Texts">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether texts will be monitored.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.ObservableDataFormats.Files">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether files will be monitored.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.ObservableDataFormats.Images">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether images will be monitored.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.ObservableDataFormats.Others">
|
||||
<summary>
|
||||
Gets or sets a value indicating whether other
|
||||
complex object-types will be monitored.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.ObservableDataFormats.ToString">
|
||||
<summary>
|
||||
Returns a <see cref="T:System.String"/> containing the list of observable data
|
||||
formats provided and their applied statuses separated by semi-colons.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.SourceApplication">
|
||||
<summary>
|
||||
Stores details of the application from
|
||||
where the clipboard's content were copied.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SourceApplication.#ctor(System.Int32,System.IntPtr,System.String,System.String,System.String)">
|
||||
<summary>
|
||||
Creates a new <see cref="T:WK.Libraries.SharpClipboardNS.SourceApplication"/> class-instance.
|
||||
</summary>
|
||||
<param name="id">The application's ID.</param>
|
||||
<param name="handle">The application's handle.</param>
|
||||
<param name="name">The application's name.</param>
|
||||
<param name="title">The application's title.</param>
|
||||
<param name="path">The application's path.</param>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SourceApplication.ID">
|
||||
<summary>
|
||||
Gets the application's process-ID.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SourceApplication.Handle">
|
||||
<summary>
|
||||
Gets the appliation's window-handle.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SourceApplication.Name">
|
||||
<summary>
|
||||
Gets the application's name.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SourceApplication.Title">
|
||||
<summary>
|
||||
Gets the application's title-text.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.SourceApplication.Path">
|
||||
<summary>
|
||||
Gets the application's absolute path.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.SourceApplication.ToString">
|
||||
<summary>
|
||||
Returns a <see cref="T:System.String"/> containing the list
|
||||
of application details provided.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle">
|
||||
<summary>
|
||||
This window acts as a handle to the clipboard-monitoring process and
|
||||
thus will be launched in the background once the component has started
|
||||
the monitoring service. However, it won't be visible to anyone even via
|
||||
the Task Manager.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.#ctor">
|
||||
<summary>
|
||||
Initializes a new instance of <see cref="T:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle"/>.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.Ready">
|
||||
<summary>
|
||||
Checks if the handle is ready to monitor the system clipboard.
|
||||
It is used to provide a final value for use whenever the property
|
||||
'ObserveLastEntry' is enabled.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.SharpClipboardInstance">
|
||||
<summary>
|
||||
Gets or sets an active <see cref="T:WK.Libraries.SharpClipboardNS.SharpClipboard"/> instance
|
||||
for use when managing the current clipboard handle.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.CreateParams">
|
||||
<summary>
|
||||
Modifications in this overriden method have
|
||||
been added to disable viewing of the handle-
|
||||
window in the Task Manager.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.WndProc(System.Windows.Forms.Message@)">
|
||||
<summary>
|
||||
This is the main clipboard detection method.
|
||||
Algorithmic customizations are most welcome.
|
||||
</summary>
|
||||
<param name="m">The processed window-reference message.</param>
|
||||
</member>
|
||||
<member name="F:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.components">
|
||||
<summary>
|
||||
Required designer variable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.Dispose(System.Boolean)">
|
||||
<summary>
|
||||
Clean up any resources being used.
|
||||
</summary>
|
||||
<param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
</member>
|
||||
<member name="M:WK.Libraries.SharpClipboardNS.Views.ClipboardHandle.InitializeComponent">
|
||||
<summary>
|
||||
Required method for Designer support - do not modify
|
||||
the contents of this method with the code editor.
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
97
SharpClipboard/SharpClipboard/Views/ClipboardHandle.Designer.cs
generated
Normal file
97
SharpClipboard/SharpClipboard/Views/ClipboardHandle.Designer.cs
generated
Normal file
@@ -0,0 +1,97 @@
|
||||
namespace WK.Libraries.SharpClipboardNS.Views
|
||||
{
|
||||
partial class ClipboardHandle
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClipboardHandle));
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.lblInformation = new System.Windows.Forms.Label();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.pictureBox1);
|
||||
this.panel1.Controls.Add(this.lblInformation);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(408, 125);
|
||||
this.panel1.TabIndex = 2;
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
|
||||
this.pictureBox1.Location = new System.Drawing.Point(178, 14);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(53, 50);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pictureBox1.TabIndex = 3;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// lblInformation
|
||||
//
|
||||
this.lblInformation.AutoSize = true;
|
||||
this.lblInformation.ForeColor = System.Drawing.Color.DimGray;
|
||||
this.lblInformation.Location = new System.Drawing.Point(24, 72);
|
||||
this.lblInformation.Name = "lblInformation";
|
||||
this.lblInformation.Size = new System.Drawing.Size(360, 39);
|
||||
this.lblInformation.TabIndex = 2;
|
||||
this.lblInformation.Text = resources.GetString("lblInformation.Text");
|
||||
//
|
||||
// ClipboardHandle
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.ClientSize = new System.Drawing.Size(408, 125);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Name = "ClipboardHandle";
|
||||
this.Opacity = 0D;
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "";
|
||||
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnClose);
|
||||
this.Load += new System.EventHandler(this.OnLoad);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Label lblInformation;
|
||||
}
|
||||
}
|
||||
386
SharpClipboard/SharpClipboard/Views/ClipboardHandle.cs
Normal file
386
SharpClipboard/SharpClipboard/Views/ClipboardHandle.cs
Normal file
@@ -0,0 +1,386 @@
|
||||
#region Copyright
|
||||
|
||||
/*
|
||||
* The SharpClipboard Handle.
|
||||
* ---------------------------------------------+
|
||||
* Please preserve this window.
|
||||
* It acts as the core message-processing handle
|
||||
* for receiving broadcasted clipboard messages.
|
||||
*
|
||||
* The window however will not be visible to
|
||||
* end users both via the Taskbar and the Task-
|
||||
* Manager so no need to panic. At the very least
|
||||
* you may change the window's title using the
|
||||
* static property 'SharpClipboard.HandleCaption'.
|
||||
* ---------------------------------------------+
|
||||
*
|
||||
*/
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace WK.Libraries.SharpClipboardNS.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// This window acts as a handle to the clipboard-monitoring process and
|
||||
/// thus will be launched in the background once the component has started
|
||||
/// the monitoring service. However, it won't be visible to anyone even via
|
||||
/// the Task Manager.
|
||||
/// </summary>
|
||||
public partial class ClipboardHandle : Form
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of <see cref="ClipboardHandle"/>.
|
||||
/// </summary>
|
||||
public ClipboardHandle()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// [optional] Applies the default window title.
|
||||
// This may only be necessary for forensic purposes.
|
||||
Text = SharpClipboard.HandleCaption;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private IntPtr _chainedWnd;
|
||||
|
||||
const int WM_DRAWCLIPBOARD = 0x0308;
|
||||
const int WM_CHANGECBCHAIN = 0x030D;
|
||||
|
||||
private bool _ready;
|
||||
|
||||
private string _processName = string.Empty;
|
||||
private string _executableName = string.Empty;
|
||||
private string _executablePath = string.Empty;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the handle is ready to monitor the system clipboard.
|
||||
/// It is used to provide a final value for use whenever the property
|
||||
/// 'ObserveLastEntry' is enabled.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
internal bool Ready
|
||||
{
|
||||
get {
|
||||
|
||||
if (SharpClipboardInstance.ObserveLastEntry)
|
||||
_ready = true;
|
||||
|
||||
return _ready;
|
||||
|
||||
}
|
||||
set { _ready = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets an active <see cref="SharpClipboard"/> instance
|
||||
/// for use when managing the current clipboard handle.
|
||||
/// </summary>
|
||||
[Browsable(false)]
|
||||
internal SharpClipboard SharpClipboardInstance { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
#region Clipboard Management
|
||||
|
||||
#region Win32 Integration
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Clipboard Monitor
|
||||
|
||||
/// <summary>
|
||||
/// Modifications in this overriden method have
|
||||
/// been added to disable viewing of the handle-
|
||||
/// window in the Task Manager.
|
||||
/// </summary>
|
||||
protected override CreateParams CreateParams
|
||||
{
|
||||
get {
|
||||
|
||||
|
||||
var cp = base.CreateParams;
|
||||
|
||||
// Turn on WS_EX_TOOLWINDOW.
|
||||
cp.ExStyle |= 0x80;
|
||||
|
||||
return cp;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is the main clipboard detection method.
|
||||
/// Algorithmic customizations are most welcome.
|
||||
/// </summary>
|
||||
/// <param name="m">The processed window-reference message.</param>
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
base.WndProc(ref m);
|
||||
|
||||
switch (m.Msg)
|
||||
{
|
||||
case WM_DRAWCLIPBOARD:
|
||||
|
||||
// If clipboard-monitoring is enabled, proceed to listening.
|
||||
if (Ready && SharpClipboardInstance.MonitorClipboard)
|
||||
{
|
||||
IDataObject dataObj;
|
||||
int retryCount = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
dataObj = Clipboard.GetDataObject();
|
||||
break;
|
||||
}
|
||||
catch (ExternalException)
|
||||
{
|
||||
// Crashes when large data is copied from clipboard
|
||||
// without retries. We'll therefore need to do a 5-step
|
||||
// retry count to cut some slack for the operation to
|
||||
// fully complete and ensure that the data is captured;
|
||||
// if all else fails, then throw an exception.
|
||||
// You may extend the retries if need be.
|
||||
if (++retryCount > 5)
|
||||
throw;
|
||||
|
||||
System.Threading.Thread.Sleep(100);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Determines whether a file/files have been cut/copied.
|
||||
if ((SharpClipboardInstance.ObservableFormats.Files == true) &&
|
||||
(dataObj.GetDataPresent(DataFormats.FileDrop)))
|
||||
{
|
||||
string[] capturedFiles = (string[])dataObj.GetData(DataFormats.FileDrop);
|
||||
|
||||
// If the 'capturedFiles' string array persists as null, then this means
|
||||
// that the copied content is of a complex object type since the file-drop
|
||||
// format is able to capture more-than-just-file content in the clipboard.
|
||||
// Therefore assign the content its rightful type.
|
||||
if (capturedFiles == null)
|
||||
{
|
||||
SharpClipboardInstance.ClipboardObject = dataObj;
|
||||
SharpClipboardInstance.ClipboardText = dataObj.GetData(DataFormats.UnicodeText).ToString();
|
||||
|
||||
SharpClipboardInstance.Invoke(dataObj, SharpClipboard.ContentTypes.Other,
|
||||
new SourceApplication(GetForegroundWindow(), SharpClipboardInstance.ForegroundWindowHandle(),
|
||||
GetApplicationName(), GetActiveWindowTitle(), GetApplicationPath()));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Clear all existing files before update.
|
||||
SharpClipboardInstance.ClipboardFiles.Clear();
|
||||
|
||||
SharpClipboardInstance.ClipboardFiles.AddRange(capturedFiles);
|
||||
SharpClipboardInstance.ClipboardFile = capturedFiles[0];
|
||||
|
||||
SharpClipboardInstance.Invoke(capturedFiles, SharpClipboard.ContentTypes.Files,
|
||||
new SourceApplication(GetForegroundWindow(), SharpClipboardInstance.ForegroundWindowHandle(),
|
||||
GetApplicationName(), GetActiveWindowTitle(), GetApplicationPath()));
|
||||
}
|
||||
}
|
||||
|
||||
// Determines whether text has been cut/copied.
|
||||
else if ((SharpClipboardInstance.ObservableFormats.Texts == true) &&
|
||||
(dataObj.GetDataPresent(DataFormats.Text) || dataObj.GetDataPresent(DataFormats.UnicodeText)))
|
||||
{
|
||||
string capturedText = dataObj.GetData(DataFormats.UnicodeText).ToString();
|
||||
SharpClipboardInstance.ClipboardText = capturedText;
|
||||
|
||||
SharpClipboardInstance.Invoke(capturedText, SharpClipboard.ContentTypes.Text,
|
||||
new SourceApplication(GetForegroundWindow(), SharpClipboardInstance.ForegroundWindowHandle(),
|
||||
GetApplicationName(), GetActiveWindowTitle(), GetApplicationPath()));
|
||||
}
|
||||
|
||||
// Determines whether an image has been cut/copied.
|
||||
else if ((SharpClipboardInstance.ObservableFormats.Images == true) &&
|
||||
(dataObj.GetDataPresent(DataFormats.Bitmap)))
|
||||
{
|
||||
Image capturedImage = dataObj.GetData(DataFormats.Bitmap) as Image;
|
||||
SharpClipboardInstance.ClipboardImage = capturedImage;
|
||||
|
||||
SharpClipboardInstance.Invoke(capturedImage, SharpClipboard.ContentTypes.Image,
|
||||
new SourceApplication(GetForegroundWindow(), SharpClipboardInstance.ForegroundWindowHandle(),
|
||||
GetApplicationName(), GetActiveWindowTitle(), GetApplicationPath()));
|
||||
}
|
||||
|
||||
// Determines whether a complex object has been cut/copied.
|
||||
else if ((SharpClipboardInstance.ObservableFormats.Others == true) &&
|
||||
!(dataObj.GetDataPresent(DataFormats.FileDrop)))
|
||||
{
|
||||
SharpClipboardInstance.Invoke(dataObj, SharpClipboard.ContentTypes.Other,
|
||||
new SourceApplication(GetForegroundWindow(), SharpClipboardInstance.ForegroundWindowHandle(),
|
||||
GetApplicationName(), GetActiveWindowTitle(), GetApplicationPath()));
|
||||
}
|
||||
}
|
||||
catch (AccessViolationException)
|
||||
{
|
||||
// Use-cases such as Remote Desktop usage might throw this exception.
|
||||
// Applications with Administrative privileges can however override
|
||||
// this exception when run in a production environment.
|
||||
}
|
||||
catch (NullReferenceException) { }
|
||||
}
|
||||
|
||||
// Provides support for multi-instance clipboard monitoring.
|
||||
SendMessage(_chainedWnd, m.Msg, m.WParam, m.LParam);
|
||||
|
||||
break;
|
||||
|
||||
case WM_CHANGECBCHAIN:
|
||||
|
||||
if (m.WParam == _chainedWnd)
|
||||
_chainedWnd = m.LParam;
|
||||
else
|
||||
SendMessage(_chainedWnd, m.Msg, m.WParam, m.LParam);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
public void StartMonitoring()
|
||||
{
|
||||
this.Show();
|
||||
}
|
||||
|
||||
public void StopMonitoring()
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Source App Management
|
||||
|
||||
#region Win32 Externals
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern int GetForegroundWindow();
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern IntPtr GetForegroundWindowPtr();
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern UInt32 GetWindowThreadProcessId(Int32 hWnd, out Int32 lpdwProcessId);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
private Int32 GetProcessID(Int32 hwnd)
|
||||
{
|
||||
Int32 processID = 1;
|
||||
GetWindowThreadProcessId(hwnd, out processID);
|
||||
|
||||
return processID;
|
||||
}
|
||||
|
||||
private string GetApplicationName()
|
||||
{
|
||||
try
|
||||
{
|
||||
Int32 hwnd = 0;
|
||||
hwnd = GetForegroundWindow();
|
||||
|
||||
_processName = Process.GetProcessById(GetProcessID(hwnd)).ProcessName;
|
||||
_executablePath = Process.GetProcessById(GetProcessID(hwnd)).MainModule.FileName;
|
||||
_executableName = _executablePath.Substring(_executablePath.LastIndexOf(@"\") + 1);
|
||||
}
|
||||
catch (Exception) { }
|
||||
|
||||
return _executableName;
|
||||
}
|
||||
|
||||
private string GetApplicationPath()
|
||||
{
|
||||
return _executablePath;
|
||||
}
|
||||
|
||||
private string GetActiveWindowTitle()
|
||||
{
|
||||
const int capacity = 256;
|
||||
StringBuilder content = null;
|
||||
IntPtr handle = IntPtr.Zero;
|
||||
|
||||
try
|
||||
{
|
||||
content = new StringBuilder(capacity);
|
||||
handle = SharpClipboardInstance.ForegroundWindowHandle();
|
||||
}
|
||||
catch (Exception) { }
|
||||
|
||||
if (GetWindowText(handle, content, capacity) > 0)
|
||||
return content.ToString();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
private void OnLoad(object sender, EventArgs e)
|
||||
{
|
||||
// Start listening for clipboard changes.
|
||||
_chainedWnd = SetClipboardViewer(this.Handle);
|
||||
|
||||
Ready = true;
|
||||
}
|
||||
|
||||
private void OnClose(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
// Stop listening to clipboard changes.
|
||||
ChangeClipboardChain(this.Handle, _chainedWnd);
|
||||
|
||||
_chainedWnd = IntPtr.Zero;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
176
SharpClipboard/SharpClipboard/Views/ClipboardHandle.resx
Normal file
176
SharpClipboard/SharpClipboard/Views/ClipboardHandle.resx
Normal file
@@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="lblInformation.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="lblInformation.Text" xml:space="preserve">
|
||||
<value>Please note that this window acts as a handle to the clipboard-monitoring
|
||||
process and thus will be launched in the background once the component
|
||||
has started the monitoring service. However, it won't be visible to anyone.</value>
|
||||
</data>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
1
SharpClipboard/_config.yml
Normal file
1
SharpClipboard/_config.yml
Normal file
@@ -0,0 +1 @@
|
||||
theme: jekyll-theme-cayman
|
||||
Reference in New Issue
Block a user