add ClipboardHook
This commit is contained in:
1 parent
ec9020fe1c
commit
a9720f080b
4 files changed
+55
-2
No files matched your search
@@ -6,7 +6,7 @@
|
|||||||
<SharedGUID>c4694269-c9b8-45d5-87f8-d0088c532510</SharedGUID>
|
<SharedGUID>c4694269-c9b8-45d5-87f8-d0088c532510</SharedGUID>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Configuration">
|
<PropertyGroup Label="Configuration">
|
||||||
<Import_RootNamespace>HandyControlDemo_Shared</Import_RootNamespace>
|
<Import_RootNamespace>HandyControlDemo</Import_RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)App.xaml.cs">
|
<Compile Include="$(MSBuildThisFileDirectory)App.xaml.cs">
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<SharedGUID>aac11083-faca-405d-9197-5c1212d65656</SharedGUID>
|
<SharedGUID>aac11083-faca-405d-9197-5c1212d65656</SharedGUID>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Configuration">
|
<PropertyGroup Label="Configuration">
|
||||||
<Import_RootNamespace>HandyControl_Shared</Import_RootNamespace>
|
<Import_RootNamespace>HandyControl</Import_RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Controls\Attach\BackgroundSwitchElement.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Controls\Attach\BackgroundSwitchElement.cs" />
|
||||||
@@ -271,6 +271,7 @@
|
|||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\SingleOpenHelper.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\SingleOpenHelper.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\ValidateHelper.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\ValidateHelper.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\VisualHelper.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\VisualHelper.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Hook\ClipboardHook.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Hook\KeyboardHook.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Hook\KeyboardHook.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Hook\MouseHook.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Hook\MouseHook.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Tools\Interop\BitmapHandle.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Tools\Interop\BitmapHandle.cs" />
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Interop;
|
||||||
|
using HandyControl.Tools.Interop;
|
||||||
|
|
||||||
|
namespace HandyControl.Tools
|
||||||
|
{
|
||||||
|
public class ClipboardHook
|
||||||
|
{
|
||||||
|
private static HwndSource HWndSource;
|
||||||
|
|
||||||
|
private static IntPtr HookId = IntPtr.Zero;
|
||||||
|
|
||||||
|
public static event Action ContentChanged;
|
||||||
|
|
||||||
|
public static void Start()
|
||||||
|
{
|
||||||
|
if (HookId != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
HookId = new WindowInteropHelper(new Window()).EnsureHandle();
|
||||||
|
HWndSource = HwndSource.FromHwnd(HookId);
|
||||||
|
if (HWndSource != null)
|
||||||
|
{
|
||||||
|
HWndSource.AddHook(WinProc);
|
||||||
|
NativeMethods.AddClipboardFormatListener(HookId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Stop() => NativeMethods.RemoveClipboardFormatListener(HookId);
|
||||||
|
|
||||||
|
private static IntPtr WinProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
|
||||||
|
{
|
||||||
|
if (msg == NativeMethods.WM_CLIPBOARDUPDATE)
|
||||||
|
{
|
||||||
|
ContentChanged?.Invoke();
|
||||||
|
}
|
||||||
|
return IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -46,6 +46,7 @@ namespace HandyControl.Tools.Interop
|
|||||||
WM_MBUTTONDOWN = 0x0207,
|
WM_MBUTTONDOWN = 0x0207,
|
||||||
WM_MBUTTONUP = 0x0208,
|
WM_MBUTTONUP = 0x0208,
|
||||||
WM_MBUTTONDBLCLK = 0x0209,
|
WM_MBUTTONDBLCLK = 0x0209,
|
||||||
|
WM_CLIPBOARDUPDATE = 0x031D,
|
||||||
WM_USER = 0x0400,
|
WM_USER = 0x0400,
|
||||||
TB_GETBUTTON = WM_USER + 23,
|
TB_GETBUTTON = WM_USER + 23,
|
||||||
TB_BUTTONCOUNT = WM_USER + 24,
|
TB_BUTTONCOUNT = WM_USER + 24,
|
||||||
@@ -223,5 +224,13 @@ namespace HandyControl.Tools.Interop
|
|||||||
|
|
||||||
[DllImport(ExternDll.User32)]
|
[DllImport(ExternDll.User32)]
|
||||||
public static extern IntPtr GetDesktopWindow();
|
public static extern IntPtr GetDesktopWindow();
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
public static extern bool AddClipboardFormatListener(IntPtr hwnd);
|
||||||
|
|
||||||
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
public static extern bool RemoveClipboardFormatListener(IntPtr hwnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user