mirror of https://github.com/leiurayer/downkyi
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
46 lines
1.2 KiB
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows;
|
|
using System.Windows.Interop;
|
|
|
|
namespace DownKyi.Utils
|
|
{
|
|
public class ClipboardHooker : IDisposable
|
|
{
|
|
private const int WM_CLIPBOARDUPDATE = 0x031D;
|
|
|
|
[DllImport("User32.dll")]
|
|
private static extern bool AddClipboardFormatListener(IntPtr hwnd);
|
|
|
|
private readonly HwndSource _hwndSource = null;
|
|
|
|
public void Dispose()
|
|
{
|
|
_hwndSource?.Dispose();
|
|
}
|
|
|
|
public ClipboardHooker(Window window)
|
|
{
|
|
WindowInteropHelper helper = new WindowInteropHelper(window);
|
|
_hwndSource = HwndSource.FromHwnd(helper.Handle);
|
|
bool r = AddClipboardFormatListener(_hwndSource.Handle);
|
|
if (r)
|
|
{
|
|
_hwndSource.AddHook(new HwndSourceHook(OnHooked));
|
|
}
|
|
}
|
|
|
|
private IntPtr OnHooked(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
|
{
|
|
if (msg == WM_CLIPBOARDUPDATE)
|
|
{
|
|
ClipboardUpdated?.Invoke(this, EventArgs.Empty);
|
|
return IntPtr.Zero;
|
|
}
|
|
return IntPtr.Zero;
|
|
}
|
|
|
|
public event EventHandler ClipboardUpdated;
|
|
}
|
|
}
|