private static bool WinSetData(WinClipboardFormat format, byte[] data) { if (!OpenClipboard(IntPtr.Zero)) { return(false); } EmptyClipboard(); IntPtr hgData = Marshal.AllocHGlobal(data.Length); if (hgData == IntPtr.Zero) { return(false); } IntPtr ptData = GlobalLock(hgData); if (ptData == IntPtr.Zero) { Marshal.FreeHGlobal(hgData); return(false); } Marshal.Copy(data, 0, ptData, data.Length); GlobalUnlock(hgData); if (SetClipboardData((uint)format, ptData) == IntPtr.Zero) { Marshal.FreeHGlobal(hgData); return(false); } CloseClipboard(); return(true); }
private static byte[] WinGetData(WinClipboardFormat format) { if (!IsClipboardFormatAvailable((uint)format)) { return(null); } if (!OpenClipboard(IntPtr.Zero)) { return(null); } IntPtr hgData = GetClipboardData((uint)format); if (hgData == IntPtr.Zero) { return(null); } IntPtr ptData = GlobalLock(hgData); if (ptData == IntPtr.Zero) { return(null); } int size = GlobalSize(hgData); byte[] data = new byte[size]; Marshal.Copy(ptData, data, 0, size); GlobalUnlock(hgData); CloseClipboard(); return(data); }