为什么clipboard.setdataobject不会在C#中将对象复制到剪贴板

时间:2016-07-17 13:54:52

标签: c# clipboard copy-paste keystroke

我有一个win app(C#),它使用剪贴板向/从其他应用程序发送和接收数据。例如,我想在Windows中使用Word应用程序,我使用c#将文本复制到剪贴板,但是当我想在c#中模拟粘贴键scrapy crawl funda1 -a place=rotterdam -a page=2时,剪贴板是空的,我刚刚得到(Stroke Ctrl+v)结果。 要复制到剪贴板,请使用以下代码:

"v"

要模拟粘贴或描边Ctrl + v,我使用以下代码

  public static void CopyToClipboard(string textForCopyToClipBoard)
  {
     Clipboard.Clear();
     Clipboard.SetDataObject(
     textForCopyToClipBoard, 
     true, 
     5, 
     200); 
   }

1 个答案:

答案 0 :(得分:2)

嗯,关于在剪贴板上放置对象的正确代码是:

Clipboard.SetText("hello");

您需要使用System.Windows.FormsSystem.Windows名称空间。

您只能从STA线程访问剪贴板。 Rick Brewster在Paint.NET中对常规的Edit-> Paste命令进行了一些重构。

代码:

IDataObject idat = null;
Exception threadEx = null;
Thread staThread = new Thread(
    delegate ()
    {
        try
        {
            idat = Clipboard.GetDataObject();
        }

        catch (Exception ex) 
        {
            threadEx = ex;            
        }
    });
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();
// at this point either you have clipboard data or an exception