应用之间的剪贴板转移

时间:2012-12-10 13:39:13

标签: c# .net clipboard

神秘的剪贴板问题:

我正在开发一个正在开发的应用程序,它启动一个外部应用程序(作为System.Diagnostics.Process对象),它希望将一些数据(文本)复制到剪贴板。当外部应用程序关闭时,客户端应用程序将从剪贴板中检索文本。

问题在于,虽然外部应用程序将文本复制到剪贴板后我可以将其粘贴到记事本中,但是客户端应用程序从剪贴板中获取一个空字符串。

外部应用代码:

    private void btn1_Click(object sender, EventArgs e)
    {
        //copy text pane to clipboard
        DataObject obj = new DataObject();
        obj.SetData(tbText.Text);
        System.Windows.Forms.Clipboard.SetDataObject(obj);
    }

客户端应用代码:

        string returnedValues = string.Empty;

        System.Windows.Forms.IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
        if (data != null && data.GetDataPresent(System.Windows.Forms.DataFormats.Text) == true)
        {
            returnedValues = (string) data.GetData(System.Windows.Forms.DataFormats.Text, true));
        }

数据对象始终为null,即使剪贴板中包含文本,我也可以将其粘贴到其他应用程序中。

有人能指出我在客户端应用程序代码中的缺陷吗?为什么数据'即使剪贴板上有数据,也总是为空?

2 个答案:

答案 0 :(得分:1)

当你的所有剪贴板都是一个复制为文本的字符串时,你必须将其检索为

Clipboard.GetText()

并检索其他类型的对象,您可以使用GetData()

答案 1 :(得分:0)

对于文字,您确实应该使用SetText()GetText()。并确保覆盖剪贴板的当前内容是用户在您的方案中所期望的。如果没有,您应该使用进程间通信,请参阅例如What is the simplest method of inter-process communication between 2 C# processes?