joonood Ответов: 1

Почему clipboard. setdataobject не копирует объект в буфер обмена в C#


У меня есть приложение win (C#), которое использует буфер обмена для отправки и получения данных в/из других приложений. например, я хочу использовать приложение Word в windows, я копирую текст с помощью c# в буфер обмена , но когда я хочу имитировать клавишу вставки (Stroke Ctrl+v) в c#, буфер обмена пуст, и я просто получил "v" в результате.
Для копирования в буфер обмена я использую следующий код:
public static void CopyToClipboard(string textForCopyToClipBoard)
{
  Clipboard.Clear();
  Clipboard.SetDataObject(
        textForCopyInClipBoard, 
        true, 
        5, 
        200); 
}


Чтобы имитировать вставку или обводку Ctrl+v, я использую следующий код
public static void PasteFromClipboard()
       {
           System.Windows.Forms.SendKeys.Send("^v");
       }


Что я уже пробовал:

Чтобы скопировать в буфер обмена, я попробовал следующий метод

1 Ответов

Рейтинг:
2

OriginalGriff

Начните с использования буфера обмена.SetText вместо SetDataObject - в данном случае это не должно иметь никакого значения, но это более простой способ сделать что-то.
Ваш код работает: я попробовал его в простой форме в одном из своих приложений:

private void button2_Click(object sender, EventArgs e)
    {
    tbPasteIntoMe.Focus();
    Clipboard.SetText("Hello there!");
    SendKeys.Send("^v");
    }
И мое текстовое поле получает строку "Привет!" без проблем.
But...do помните, что SendKeys всегда отправляет в активное приложение - которое, вероятно, ваше, а не то, в которое вы хотите вставить. Это может иметь какое-то отношение к вашей проблеме...

Но, честно говоря, вы не должны использовать буфер обмена, если пользователь явно не сказал вам об этом - многие пользователи (включая меня) будут очень, очень раздражены, если вы перепишете то, что они поместили в буфер обмена, не спросив их заранее.
Вероятно, вам следует найти лучший метод межпроцессной коммуникации - использование буфера обмена-это то, что я называю подходом "грубой силы и невежества", который обычно означает, что весь ваш дизайн нуждается в рассмотрении.