2016-07-17 34 views
0

Ich habe eine Win App (C#), die Zwischenablage verwenden, um Daten zu/von anderen Anwendungen zu senden und zu empfangen. Zum Beispiel möchte ich Word-App in Windows verwenden, kopiere ich einen Text mit C# in die Zwischenablage, aber wenn ich in C# Paste einfügen Schlüssel (Stroke Ctrl+v) simulieren möchte, ist die Zwischenablage leer und ich habe gerade "v" als Ergebnis. in die Zwischenablage kopieren ich den folgenden Code verwenden:Warum clipboard.setdataobject kopiert Objekt nicht in die Zwischenablage in C#

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

zu simulieren Paste oder Schlaganfall Strg + v, verwende ich den folgenden Code

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

Antwort

2

Nun, der richtige Code über die Putting Objekte auf Zwischenablage:

Clipboard.SetText("hello"); 

Hier finden Sie die System.Windows.Forms oder System.Windows Namespaces für das verwenden müssen.

Sie können nur über einen STA-Thread auf die Zwischenablage zugreifen. Rick Brewster stieß dabei auf etwas Refactoring des regulären Edit-> Paste-Befehls in Paint.NET.

Code:

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