Hot Cool Stud
Hot Cool Stud

Reputation: 1205

Windows 7 clipboard copy paste operation using C#

I'm working on a Windows application where I need to use clipboard data. I am trying to copy text from clipboard by the code below.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace MultiValuedClipBoard
{
    class Class1
    {

        public String SwapClipboardHtmlText(String replacementHtmlText)
        {
            String returnHtmlText = "hello";
            if (Clipboard.ContainsText(TextDataFormat.Html))
            {
                returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
                Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
            }
            return returnHtmlText;
        }
    }
}

Calling the above function by:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace MultiValuedClipBoard
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 aas = new Class1();
            string a = aas.SwapClipboardHtmlText("chetan");
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }
}

When running this code it gives the output "Hello" which is the default value, not clipboard data.

Upvotes: 1

Views: 1795

Answers (2)

David Heffernan
David Heffernan

Reputation: 613461

Clearly Clipboard.ContainsText(TextDataFormat.Html) evaluates to false. Which means that the clipboard in fact does not contain text in the format you specify.

I changed your program to prove the point:

[STAThread]
static void Main(string[] args)
{
    Clipboard.SetText("boo yah!", TextDataFormat.Html);
    Class1 aas = new Class1();
    string a = aas.SwapClipboardHtmlText("chetan");
    Console.WriteLine(a);
    Console.WriteLine(Clipboard.GetText(TextDataFormat.Html));
    Console.ReadLine();
}

Output:

boo yah!
chetan

Upvotes: 1

Prahlad Yeri
Prahlad Yeri

Reputation: 3663

Your code will not work because of two reasons:

[1] When you say:

if (Clipboard.ContainsText(TextDataFormat.Html))

Here you are basically assuming that the clipboard already contains a text and that too in HTML format, but depending on the values you are setting in the clipboard it doesn't look like you are intending to use the pre-existing clipboard value anywhere in your program. So, this if condition should not be there.

[2] Secondly, you are further trying to set the string "chetan" to the clipboard which is definitely not in HTML format. So,

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);

becomes

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);

Hence, effectively, your new code becomes something like this:

        String returnHtmlText = "hello";
        //if (Clipboard.ContainsText(TextDataFormat.Html))
        //{
            returnHtmlText = Clipboard.GetText(TextDataFormat.Text);
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);
        //}
        return returnHtmlText;

Upvotes: 2

Related Questions