Exemplo n.º 1
0
        //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);
        }
Exemplo n.º 2
0
 static IntPtr GetLockedMemoryBlockPointer(IntPtr dataPointer)
 {
     return(GeneralNativeApi.GlobalLock(dataPointer));
 }
Exemplo n.º 3
0
 static UIntPtr GetPointerDataLength(IntPtr dataPointer)
 {
     return(GeneralNativeApi.GlobalSize(dataPointer));
 }