//TODO: refactor this into custom service. internal static byte[] GetClipboardDataBytes(uint format) { var dataPointer = GetClipboardDataPointer(format); var length = GetPointerDataLength(dataPointer); if (length == UIntPtr.Zero) { return(null); } var lockedMemory = GetLockedMemoryBlockPointer(dataPointer); if (lockedMemory == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } var buffer = new byte[(int)length]; Marshal.Copy(lockedMemory, buffer, 0, (int)length); GeneralNativeApi.GlobalUnlock(dataPointer); return(buffer); }
static IntPtr GetLockedMemoryBlockPointer(IntPtr dataPointer) { return(GeneralNativeApi.GlobalLock(dataPointer)); }
static UIntPtr GetPointerDataLength(IntPtr dataPointer) { return(GeneralNativeApi.GlobalSize(dataPointer)); }