[DllImport("user32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AddClipboardFormatListener(IntPtr hwnd);
<DllImport("user32.dll", SetLastError:=true)> _
Public Shared Function AddClipboardFormatListener(hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)>Boolean
Declare Function AddClipboardFormatListener Lib "user32.dll" (hWnd As Long) As Boolean
None.
Do you know one? Please contribute it!
AddClipboardFormatListener is much simpler than setting up a clipboard viewer window. The Format listener doesn't require maintaining the chain of clipboard notifications. The AddClipboardFormatListener() API was added with Windows XP and Windows Server 2008.
Please add some!
Please add some!
// C# Example:
// Declare the API method for placing the given window in the system-maintained clipboard format listener list.
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AddClipboardFormatListener(IntPtr hwnd);
// Declare the API method for removing the given window from the system-maintained clipboard format listener list.
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool RemoveClipboardFormatListener(IntPtr hwnd);
// Here is the message sent when the contents of the clipboard have changed.
private const int WM_CLIPBOARDUPDATE = 0x031D;
// Here is how to add our window to the Clipboard Format Listener:
AddClipboardFormatListener(this.Handle);
// Here is how to process The Message:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_CLIPBOARDUPDATE)
{
IDataObject iData = Clipboard.GetDataObject(); // Clipboard's data.
if (iData.GetDataPresent(DataFormats.Text))
{
string text = (string)iData.GetData(DataFormats.Text);
// do something with it
}
else if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap image = (Bitmap)iData.GetData(DataFormats.Bitmap);
// do something with it
}
// you can also check for more formats and process accordingly
}
}
// When closing your program, first remove the format listener:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
RemoveClipboardFormatListener(this.Handle); // Remove our window from the clipboard's format listener list.
}