【问题标题】:Why clipboard.setdataobject doesn't copy object to the clipboard in C#为什么 clipboard.setdataobject 不会将对象复制到 C# 中的剪贴板
【发布时间】:2016-07-17 22:50:58
【问题描述】:

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

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

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

public static void PasteFromClipboard()
   {
        System.Windows.Forms.SendKeys.Send("^v");
   }

【问题讨论】:

    标签: c# clipboard copy-paste keystroke


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多