setclipboardviewer (user32)
Last changed: -85.115.224.12

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    [DllImport("user32.dll")]
    static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);

    [DllImport("user32.dll")]
    static extern IntPtr GetClipboardViewer();

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);

    [DllImport("user32.dll", SetLastError = true)]
    static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

    IntPtr hWndNextWindow;

    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
        case (0x0001): // WM_CREATE
            hWndNextWindow = SetClipboardViewer(this.Handle);
            break;
        case (0x0002): // WM_DESTROY
            ChangeClipboardChain(this.Handle, hWndNextWindow);
            break;
        case (0x030D): // WM_CHANGECBCHAIN
            if (m.WParam == hWndNextWindow)
            hWndNextWindow = m.LParam;
            else if (hWndNextWindow != IntPtr.Zero)
            SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam);
            break;
        case (0x0308): // WM_DRAWCLIPBOARD
            {
            // If the clipboard has changed, this event will be executed.
            }
            SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam);
            break;
        }

        base.WndProc(ref m);
    }

Alternative Managed API:

The ManagedWindowsApi project (http://mwinapi.sourceforge.net) provides a

ClipboardNotifier class.

Documentation