EMF/WMF形式のイメージをクリップボードに入れたい

クリップボードにテキストやビットマップイメージをコピーするのは、Clipboardクラスを使うと簡単にできます。
 例: Clipboard.SetText("コピーする文字列");
しかし、EMF/WMF形式のイメージの場合には、この方法は使えません。背後で使用している.NET FrameworkのDataObjectクラスがEMF/WMFをサポートしていないためです。
回避するには、以下の例のようにWindows Native API を使う必要があります。
public const int CF_ENHMETAFILE = 14;

[DllImport("user32.dll", SetLastError = true)]
public static extern bool OpenClipboard(IntPtr hWndNewOwner);

[DllImport("user32.dll", SetLastError = true)]
public static extern bool CloseClipboard();

[DllImport("user32.dll")]
public static extern bool EmptyClipboard();

[DllImport("user32.dll")]
public static extern IntPtr SetClipboardData(uint uFormat, IntPtr obj);

[DllImport("user32.dll")]
public static extern IntPtr GetClipboardData(uint uFormat);


private void copyToClipboard(Metafile meta)
{
    IntPtr hMeta = meta.GetHenhmetafile();
    if (NativeMethods.OpenClipboard(IntPtr.Zero))
    {
        NativeMethods.EmptyClipboard();
        NativeMethods.SetClipboardData(NativeMethods.CF_ENHMETAFILE, hMeta);
        NativeMethods.CloseClipboard();
    }
}