Last active
April 12, 2017 18:07
-
-
Save jpreece6/85a1e3e4a55782acf658521a04f3cab7 to your computer and use it in GitHub Desktop.
Notification class designed to an raise event when the clipboard contents change.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Runtime.InteropServices; | |
using System.Text; | |
using System.Threading.Tasks; | |
using System.Windows.Forms; | |
namespace Notifications | |
{ | |
/// <summary> | |
/// Provides notifications when the contents of the clipboard is updated. | |
/// </summary> | |
public sealed class ClipboardNotification | |
{ | |
/// <summary> | |
/// Occurs when the contents of the clipboard is updated. | |
/// </summary> | |
public static event EventHandler ClipboardUpdate; | |
private static NotificationForm _form = new NotificationForm(); | |
/// <summary> | |
/// Raises the <see cref="ClipboardUpdate"/> event. | |
/// </summary> | |
/// <param name="e">Event arguments for the event.</param> | |
private static void OnClipboardUpdate(EventArgs e) | |
{ | |
var handler = ClipboardUpdate; | |
if (handler != null) | |
{ | |
handler(null, e); | |
} | |
} | |
/// <summary> | |
/// Hidden form to recieve the WM_CLIPBOARDUPDATE message. | |
/// </summary> | |
private class NotificationForm : Form | |
{ | |
public NotificationForm() | |
{ | |
NativeMethods.SetParent(Handle, NativeMethods.HWND_MESSAGE); | |
NativeMethods.AddClipboardFormatListener(Handle); | |
} | |
protected override void WndProc(ref Message m) | |
{ | |
if (m.Msg == NativeMethods.WM_CLIPBOARDUPDATE) | |
{ | |
OnClipboardUpdate(null); | |
} | |
base.WndProc(ref m); | |
} | |
} | |
} | |
internal static class NativeMethods | |
{ | |
// See http://msdn.microsoft.com/en-us/library/ms649021%28v=vs.85%29.aspx | |
public const int WM_CLIPBOARDUPDATE = 0x031D; | |
public static IntPtr HWND_MESSAGE = new IntPtr(-3); | |
// See http://msdn.microsoft.com/en-us/library/ms632599%28VS.85%29.aspx#message_only | |
[DllImport("user32.dll", SetLastError = true)] | |
[return: MarshalAs(UnmanagedType.Bool)] | |
public static extern bool AddClipboardFormatListener(IntPtr hwnd); | |
// See http://msdn.microsoft.com/en-us/library/ms633541%28v=vs.85%29.aspx | |
// See http://msdn.microsoft.com/en-us/library/ms649033%28VS.85%29.aspx | |
[DllImport("user32.dll", SetLastError = true)] | |
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment