private unsafe object GetDataFromOleHGLOBAL(string format, DVASPECT aspect) { var formatEtc = new Interop.FORMATETC(); formatEtc.cfFormat = ClipboardFormats.GetFormat(format); formatEtc.dwAspect = aspect; formatEtc.lindex = -1; formatEtc.tymed = TYMED.TYMED_HGLOBAL; if (_wrapped.QueryGetData(&formatEtc) == 0) { Interop.STGMEDIUM medium = default; _ = _wrapped.GetData(&formatEtc, &medium); try { if (medium.unionmember != IntPtr.Zero && medium.tymed == TYMED.TYMED_HGLOBAL) { if (format == DataFormats.Text) { return(ReadStringFromHGlobal(medium.unionmember)); } if (format == DataFormats.FileNames) { return(ReadFileNamesFromHGlobal(medium.unionmember)); } byte[] data = ReadBytesFromHGlobal(medium.unionmember); if (IsSerializedObject(data)) { using (var ms = new MemoryStream(data)) { ms.Position = DataObject.SerializedObjectGUID.Length; BinaryFormatter binaryFormatter = new BinaryFormatter(); return(binaryFormatter.Deserialize(ms)); } } return(data); } } finally { UnmanagedMethods.ReleaseStgMedium(ref medium); } } return(null); }
/////////////////////////////////////////////////////////////////////////// // IAdviseSink Implementation public void OnDataChange(Interop.FORMATETC pFormat, Interop.STGMEDIUM pStg) { }