SendInput Ctrl + C, а затем получить скопированный контент через Clipboard.GetText не работает

У меня есть простое приложение Windows Forms с TextBox и Button. Нажатие на Button переместит фокус на TextBox и имитирует нажатия клавиш Ctrl + C для копирования содержимого в буфер обмена. Я делаю эту симуляцию клавиш с помощью SendInput, также пробовал SendKeys.Send("^c"). Это правильно работает для операции копирования, что я могу проверить, вставив содержимое в блокнот или что-то еще.

Затем я хочу программно получить это скопированное значение через Clipboard.GetText. Однако проблема в том, что этот метод всегда возвращает предыдущее значение в буфере обмена вместо текущего. Например, если последовательность значений для моего TextBox такова: «привет», «мир», то последовательность вывода такова: мусор, «привет». Ниже приведен мой код, использующий метод SendKeys для простоты:

... highlight TextBox value...

SendKeys.Send("^c");
Thread.Sleep(100);

Console.WriteLine(Clipboard.GetText());

person user1715925    schedule 23.10.2012    source источник


Ответы (2)


похоже, что цикл сообщений должен быть выполнен до того, как текст будет помещен в буфер обмена

попробуйте использовать

  Application.DoEvents();

вместо задержки

person user287107    schedule 23.10.2012

Попробуй это:

textBox1.Focus();
Clipboard.SetText(textBox1.Text);
textBox2.Text = Clipboard.GetText();
person Rodrigo Guedes    schedule 23.10.2012
comment
Вы также можете использовать textBox1.Copy; и textBox2.Paste; вместо Clipboard.SetText() и Clipboard.GetText() - person ; 23.10.2012
comment
Конечно, но это будет работать только в том случае, если текст выделен, иначе он сохранит предыдущее содержимое буфера обмена. - person Rodrigo Guedes; 23.10.2012
comment
Спасибо за предложения, я не пробовал эти методы, но я думаю, что они будут работать. Однако для целей моего приложения и исходного вопроса мне нужно имитировать события клавиатуры Ctrl + C, и похоже, что Application.DoEvents, как кто-то предложил ниже, - это трюк. - person user1715925; 23.10.2012