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