diff --git a/STDHelper.sln b/STDHelper.sln
new file mode 100644
index 0000000..1fa11b2
--- /dev/null
+++ b/STDHelper.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28729.10
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "STDHelper", "STDHelper\STDHelper.csproj", "{C763D8F1-B426-4E05-AA56-D1054D36392E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C763D8F1-B426-4E05-AA56-D1054D36392E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C763D8F1-B426-4E05-AA56-D1054D36392E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C763D8F1-B426-4E05-AA56-D1054D36392E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C763D8F1-B426-4E05-AA56-D1054D36392E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CB2EB343-8371-4257-B2DA-5B7CE447F5E1}
+ EndGlobalSection
+EndGlobal
diff --git a/STDHelper/App.config b/STDHelper/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/STDHelper/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/STDHelper/App.xaml b/STDHelper/App.xaml
new file mode 100644
index 0000000..90d4ffa
--- /dev/null
+++ b/STDHelper/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/STDHelper/App.xaml.cs b/STDHelper/App.xaml.cs
new file mode 100644
index 0000000..d51058e
--- /dev/null
+++ b/STDHelper/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace STDHelper
+{
+ ///
+ /// Interaktionslogik für "App.xaml"
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/STDHelper/MainWindow.xaml b/STDHelper/MainWindow.xaml
new file mode 100644
index 0000000..290b8fb
--- /dev/null
+++ b/STDHelper/MainWindow.xaml
@@ -0,0 +1,15 @@
+
+
+
diff --git a/STDHelper/MainWindow.xaml.cs b/STDHelper/MainWindow.xaml.cs
new file mode 100644
index 0000000..f4050c4
--- /dev/null
+++ b/STDHelper/MainWindow.xaml.cs
@@ -0,0 +1,225 @@
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using System.Windows.Media.Imaging;
+using System.Windows.Threading;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Windows.Interop;
+using System.Linq;
+
+namespace STDHelper
+{
+ ///
+ /// Interaktionslogik für MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ private DispatcherTimer t;
+ public MainWindow()
+ {
+ InitializeComponent();
+ t = new DispatcherTimer();
+ // Hook up the Elapsed event for the timer.
+ t.Tick += new EventHandler(OnTimedEvent);
+ t.Interval = new TimeSpan(0, 0, 1);
+ }
+
+ private void Btn_Load1_Click(object sender, RoutedEventArgs e)
+ {
+ System.Windows.Controls.Image i = FindName("image1") as System.Windows.Controls.Image;
+ LoadClipboardToImage(i);
+ }
+
+ private void LoadClipboardToImage(System.Windows.Controls.Image img)
+ {
+ BitmapSource bms = CopyScreen();
+ img.Opacity = 0.5;
+ img.Source = bms;
+ }
+
+ private void Btn_Load2_Click(object sender, RoutedEventArgs e)
+ {
+ System.Windows.Controls.Image i = FindName("image2") as System.Windows.Controls.Image;
+ LoadClipboardToImage(i);
+ }
+
+ private void Btn_Switch_Click(object sender, RoutedEventArgs e)
+ {
+ System.Windows.Controls.Image i1 = FindName("image1") as System.Windows.Controls.Image;
+ System.Windows.Controls.Image i2 = FindName("image2") as System.Windows.Controls.Image;
+ if (t.IsEnabled)
+ {
+ t.Stop();
+ i1.Visibility = Visibility.Visible;
+ i1.Opacity = 0.5;
+ i2.Visibility = Visibility.Visible;
+ i2.Opacity = 0.5;
+ }
+ else
+ {
+ i1.Opacity = 1;
+ i2.Opacity = 1;
+ t.Start();
+ }
+ }
+
+ private void OnTimedEvent(object sender, EventArgs e)
+ {
+ Debug.WriteLine("TICK");
+ System.Windows.Controls.Image i1 = FindName("image1") as System.Windows.Controls.Image;
+ System.Windows.Controls.Image i2 = FindName("image2") as System.Windows.Controls.Image;
+ Debug.WriteLine("i1 " + i1.Visibility);
+ Debug.WriteLine("i2 " + i2.Visibility);
+ if (i1.Visibility == Visibility.Hidden)
+ {
+ i1.Visibility = Visibility.Visible;
+ i2.Visibility = Visibility.Hidden;
+ } else
+ {
+ i1.Visibility = Visibility.Hidden;
+ i2.Visibility = Visibility.Visible;
+ }
+ }
+
+ private void Btn_LoadScreenshot_Click(object sender, RoutedEventArgs e)
+ {
+ System.Windows.Controls.Image i = FindName("image1") as System.Windows.Controls.Image;
+ LoadClipboardToImage(i);
+ }
+
+ private static BitmapSource CopyScreen()
+ {
+ var left = Screen.AllScreens.Min(screen => screen.Bounds.X);
+ var top = Screen.AllScreens.Min(screen => screen.Bounds.Y);
+ var right = Screen.AllScreens.Max(screen => screen.Bounds.X + screen.Bounds.Width);
+ var bottom = Screen.AllScreens.Max(screen => screen.Bounds.Y + screen.Bounds.Height);
+ var width = right - left;
+ var height = bottom - top;
+
+ using (var screenBmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
+ {
+ using (var bmpGraphics = Graphics.FromImage(screenBmp))
+ {
+ bmpGraphics.CopyFromScreen(left, top, 0, 0, new System.Drawing.Size(width, height));
+ return Imaging.CreateBitmapSourceFromHBitmap(
+ screenBmp.GetHbitmap(),
+ IntPtr.Zero,
+ Int32Rect.Empty,
+ BitmapSizeOptions.FromEmptyOptions());
+ }
+ }
+ }
+ }
+
+ public class DraggableExtender : DependencyObject
+ {
+ // This is the dependency property we're exposing - we'll
+ // access this as DraggableExtender.CanDrag="true"/"false"
+ public static readonly DependencyProperty CanDragProperty =
+ DependencyProperty.RegisterAttached("CanDrag",
+ typeof(bool),
+ typeof(DraggableExtender),
+ new UIPropertyMetadata(false, OnChangeCanDragProperty));
+
+ // The expected static setter
+ public static void SetCanDrag(UIElement element, bool o)
+ {
+ element.SetValue(CanDragProperty, o);
+ }
+
+ // the expected static getter
+ public static bool GetCanDrag(UIElement element)
+ {
+ return (bool)element.GetValue(CanDragProperty);
+ }
+
+ // This is triggered when the CanDrag property is set. We'll
+ // simply check the element is a UI element and that it is
+ // within a canvas. If it is, we'll hook into the mouse events
+ private static void OnChangeCanDragProperty(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ UIElement element = d as UIElement;
+ if (element == null) return;
+
+ if (e.NewValue != e.OldValue)
+ {
+ if ((bool)e.NewValue)
+ {
+ element.PreviewMouseDown += element_PreviewMouseDown;
+ element.PreviewMouseUp += element_PreviewMouseUp;
+ element.PreviewMouseMove += element_PreviewMouseMove;
+ }
+ else
+ {
+ element.PreviewMouseDown -= element_PreviewMouseDown;
+ element.PreviewMouseUp -= element_PreviewMouseUp;
+ element.PreviewMouseMove -= element_PreviewMouseMove;
+ }
+ }
+ }
+
+ // Determine if we're presently dragging
+ private static bool _isDragging = false;
+ // The offset from the top, left of the item being dragged
+ // and the original mouse down
+ private static System.Windows.Point _offset;
+
+ // This is triggered when the mouse button is pressed
+ // on the element being hooked
+ static void element_PreviewMouseDown(object sender,
+ System.Windows.Input.MouseButtonEventArgs e)
+ {
+
+ // Ensure it's a framework element as we'll need to
+ // get access to the visual tree
+ FrameworkElement element = sender as FrameworkElement;
+ Debug.WriteLine("MOUSEDOWN "+element.Name+" drg is "+_isDragging);
+ if (element == null) return;
+
+ // start dragging and get the offset of the mouse
+ // relative to the element
+ _isDragging = true;
+ _offset = e.GetPosition(element);
+ }
+
+ // This is triggered when the mouse is moved over the element
+ private static void element_PreviewMouseMove(object sender,
+ System.Windows.Input.MouseEventArgs e)
+ {
+ FrameworkElement element = sender as FrameworkElement;
+ Debug.WriteLine("MMOVE " + element.Name + " drg is " + _isDragging);
+ // If we're not dragging, don't bother - also validate the element
+ if (!_isDragging) return;
+
+ Debug.WriteLine("DRAGGING " + element.Name + " drg is " + _isDragging);
+
+ if (element == null) return;
+
+ var canvas = element.Parent as Canvas;
+ if (canvas == null) return;
+
+ // Get the position of the mouse relative to the canvas
+ System.Windows.Point mousePoint = e.GetPosition(canvas);
+
+ // Offset the mouse position by the original offset position
+ mousePoint.Offset(-_offset.X, -_offset.Y);
+
+ // Move the element on the canvas
+ element.SetValue(Canvas.LeftProperty, mousePoint.X);
+ element.SetValue(Canvas.TopProperty, mousePoint.Y);
+ }
+
+ // this is triggered when the mouse is released
+ private static void element_PreviewMouseUp(object sender,
+ MouseButtonEventArgs e)
+ {
+ _isDragging = false;
+ _offset = new System.Windows.Point();
+ }
+
+ }
+}
diff --git a/STDHelper/Properties/AssemblyInfo.cs b/STDHelper/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a31ecd0
--- /dev/null
+++ b/STDHelper/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("STDHelper")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("STDHelper")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie
+//ImCodeVerwendeteKultur in der .csproj-Datei
+//in einer fest. Wenn Sie in den Quelldateien beispielsweise Deutsch
+//(Deutschland) verwenden, legen Sie auf \"de-DE\" fest. Heben Sie dann die Auskommentierung
+//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile,
+//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
+ //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
+ // oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
+ ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
+ //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
+ // designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
+)]
+
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+// indem Sie "*" wie unten gezeigt eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/STDHelper/Properties/Resources.Designer.cs b/STDHelper/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b883724
--- /dev/null
+++ b/STDHelper/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion: 4.0.30319.42000
+//
+// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
+// der Code erneut generiert wird.
+//
+//------------------------------------------------------------------------------
+
+namespace STDHelper.Properties
+{
+
+
+ ///
+ /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ ///
+ // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
+ // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.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()
+ {
+ }
+
+ ///
+ /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("STDHelper.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/STDHelper/Properties/Resources.resx b/STDHelper/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/STDHelper/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/STDHelper/Properties/Settings.Designer.cs b/STDHelper/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..d01faa9
--- /dev/null
+++ b/STDHelper/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+namespace STDHelper.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.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;
+ }
+ }
+ }
+}
diff --git a/STDHelper/Properties/Settings.settings b/STDHelper/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/STDHelper/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/STDHelper/STDHelper.csproj b/STDHelper/STDHelper.csproj
new file mode 100644
index 0000000..2124f78
--- /dev/null
+++ b/STDHelper/STDHelper.csproj
@@ -0,0 +1,141 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {C763D8F1-B426-4E05-AA56-D1054D36392E}
+ WinExe
+ STDHelper
+ STDHelper
+ v4.7.2
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+ true
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 1
+ 1.0.0.%2a
+ false
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ E91E2DA49C4D2890B4348E2560C137AD9BCA1E20
+
+
+ STDHelper_TemporaryKey.pfx
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 und x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
\ No newline at end of file