/// <summary> /// Parses the ClipboardItem as a FileDrop (string[]). /// </summary> public static string[] ParseFileDrop(ClipboardItem item) { if (!CanParse(item, AbstractDataFormat.FileDrop)) { throw new ArgumentException("The ClipboardItem does not contain data in the requested format."); } switch (item.Format) { case DataFormat.HDrop: { byte[] bytes = item.GetDataBuffer(); // The first 18 bytes are object header and size information. // The rest is a block of zero-terminated unicode strings. string fileNamesZero = Encoding.Unicode.GetString(bytes, 18, bytes.Length - 18); string[] fileNames = fileNamesZero .Split('\0') .Where(x => x.Length > 0) .ToArray(); return(fileNames); } case DataFormat.ShellIdList: { byte[] bytes = item.GetDataBuffer(); NativeMethods.CIDA cida = BinaryStructConverter.FromByteArray <NativeMethods.CIDA>(bytes); return(new string[] { }); } default: throw new NotImplementedException(); } }
public static byte[] GetBytes(ClipboardItem item, AbstractDataFormat type) { switch (type) { case AbstractDataFormat.Image: { BitmapFrame frame = ParseImage(item); PngBitmapEncoder png = new PngBitmapEncoder(); png.Frames.Add(frame); using (MemoryStream mem = new MemoryStream()) { png.Save(mem); return(mem.ToArray()); } } case AbstractDataFormat.Text: { string text = ParseText(item); return(Encoding.Unicode.GetBytes(text)); } default: throw new NotSupportedException(); } }
/// <summary> /// Parses the ClipboardItem as an image (BitmapFrame). /// </summary> public static BitmapFrame ParseImage(ClipboardItem item) { if (!CanParse(item, AbstractDataFormat.Image)) { throw new ArgumentException("The ClipboardItem does not contain data in the requested format."); } switch (item.Format) { case DataFormat.Dib: byte[] dibBytes = item.GetDataBuffer(); BitmapFrame imageSource = DIBitmap.CreateBitmapFrameFromDibBytes(dibBytes); // Freeze the image to prevent modifications // and allow it to be used from different threads. imageSource.Freeze(); return(imageSource); default: throw new NotImplementedException(); } }
/// <summary> /// Parses the ClipboardItem as text (string). /// </summary> public static string ParseText(ClipboardItem item) { if (!CanParse(item, AbstractDataFormat.Text)) { throw new ArgumentException("The ClipboardItem does not contain data in the requested format."); } switch (item.Format) { case DataFormat.Text: return(ParseStringAZ(item.GetDataBuffer())); case DataFormat.UnicodeText: return(ParseStringWZ(item.GetDataBuffer())); case DataFormat.OemText: return(ParseStringAZ(item.GetDataBuffer())); default: throw new NotImplementedException(); } }
/// <summary> /// Checks if the ClipboardItem contains data /// that can be parsed as the requested type. /// </summary> /// <param name="item">The ClipboardItem.</param> /// <param name="type">The requested abstract data type.</param> /// <returns>True when the fragment contains data that can be parsed as the requested type.</returns> public static bool CanParse(ClipboardItem item, AbstractDataFormat type) { return(GetAbstractFormat(item.Format) == type); }