Tip! Get ClipSpy - CodeProject to examine the clipboard overloads.
The following console application is fully functional working code to demonstrate how to overload Windows system clipboard with multiple formats.
In below example source code specifically, we are overloading a image copy to append a caption.
Result:
When you copy an image from a browser, and paste into MSPaint, you'll get the expected image.
When you paste into Notepad, you'll get a text message.
This is the overload in action, an additional text format has been added.
Aside : See it in action with my tool - https://clipboardplaintextpowertool.blogspot.com/ which overloads images with following text metadata;
Clip iss063e070805.jpg [1041w✕585h] "NASA Image of the Day | NASA - Microsoft Edge", img src="https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/iss063e070805.jpg"
Update - Simplified further Aug 13, 2020.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; using System.Drawing; namespace ClipboardOverloadExample { class Program { [STAThread] //TIP! Set this to get clipboard handle from a console app public static void Main(string[] args) { Console.WriteLine("Right-click COPY a image from your open brower. Press any key to start..."); Console.ReadKey(); //Let's grab clipboard, do we have access and does it contain data? System.Windows.Forms.IDataObject iData = Clipboard.GetDataObject(); if (iData == null) return;
//check if we have a standard Bitmap format on the clipboard //images are saved on the clipboard as raw bitmap "Memory Bitmap",but transparency maybe lost.
if (!iData.GetDataPresent(DataFormats.Bitmap)) return; //we have Bitmap format and thus we can perform cast safely Bitmap clipBMP = iData.GetData(DataFormats.Bitmap) as Bitmap; if (clipBMP == null) return; string imgInfo = "This image is a Bitmap " + clipBMP.PixelFormat.ToString(); //Create an object that will contain multiple formats to paste - overload System.Windows.Forms.IDataObject objFormatstoPaste = new DataObject(); //add formats to put on clipboard objFormatstoPaste.SetData(DataFormats.Text, imgInfo); objFormatstoPaste.SetData(DataFormats.Bitmap, clipBMP); //Copy to the clipboard, and the 2nd parameter indicates that the clipboard is not cleared when the program exits Clipboard.SetDataObject(objFormatstoPaste, true); Console.WriteLine("Success. You can exit program, but to test overload of clipboard, do the following:"); Console.WriteLine("Open Notepad and paste (CTRL-V), you'll get text. Open MSPaint and you'll paste the image!"); Console.ReadKey(); } } }
No comments:
Post a Comment