public const uint CF_METAFILEPICT = 3; public const uint CF_ENHMETAFILE = 14; [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern bool CloseClipboard(); [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern IntPtr GetClipboardData(uint format); [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern bool IsClipboardFormatAvailable(uint format); br mode="hold" /> // Returns True if (Win32.OpenClipboard(new IntPtr(0))) { // Returns True if (Win32.IsClipboardFormatAvailable(Win32.CF_ENHMETAFILE)) { // Returns 0 IntPtr ptr = Win32.GetClipboardData(Win32.CF_ENHMETAFILE); if (!ptr.Equals(new IntPtr(0))) { // Never get here! :-( Metafile metafile = new Metafile(ptr,true); } } Win32.CloseClipboard(); } br mode="hold" /> You can pass this.Handle instead of new IntPtr(0)