public void RegisterClipboardEvent(string Purpose, Action OnClipboardDraw) { ClipboardEventListenerWindow clipboardEventListenerWindow = RegisteredClipboardEventListeners.SingleOrDefault(o => o.ClipboardEvent.Purpose == Purpose); if (clipboardEventListenerWindow == null) { ClipboardEvent clipboardEvent = new ClipboardEvent() { Purpose = Purpose, OnClipboardDraw = OnClipboardDraw }; ClipboardEventListenerWindow window = new ClipboardEventListenerWindow(clipboardEvent); IntPtr windowHandle = window.Handle; bool issuccess = WinApiMethods.AddClipboardFormatListener(windowHandle); if (!issuccess) { Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error()); throw ex; } else { RegisteredClipboardEventListeners.Add(clipboardEventListenerWindow); } } else { throw new AlreadyMappedException(clipboardEventListenerWindow.ClipboardEvent); } }
public void UnRegisterClipboardEvent(string Purpose) { ClipboardEventListenerWindow clipboardEventListenerWindow = RegisteredClipboardEventListeners.SingleOrDefault(o => o.ClipboardEvent.Purpose == Purpose); if (clipboardEventListenerWindow != null) { bool issuccess = WinApiMethods.RemoveClipboardFormatListener(clipboardEventListenerWindow.Handle); if (!issuccess) { Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error()); throw ex; } else { RegisteredClipboardEventListeners.Remove(clipboardEventListenerWindow); } } else { throw new ClipboardEventNotFoundException(Purpose); } }