The following console application is fully functional working code to demonstrate how to overload Windows system clipboard with multiple formats.
Tip! Get ClipSpy - CodeProject to examine the clipboard overloads.

In below example source code specifically, we are overloading an image copy to append a caption.

In below example source code specifically, we are overloading an 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