SendInput Ctrl + C and then retrieve copied content through Clipboard.GetText doesn't work

StackOverflow https://stackoverflow.com/questions/13035775

Pergunta

I have a simple windows forms application with a TextBox and a Button. Clicking on the Button will put focus on the TextBox and simulate keystrokes Ctrl + C to copy the content into the clipboard. I am doing this key simulation with SendInput, also tried SendKeys.Send("^c"). This works properly for the copy operation, as I can verify by pasting the content to a notepad or something else.

I then want to programmatically retrieve this copied value through Clipboard.GetText. However, the problem is that this method always seems to return the previous value in Clipboard instead of the current one. For example, if the sequence of values for my TextBox is: "hello", "world", then the sequence of output is: junk, "hello". Below is my code using the SendKeys method for simplicity:

... highlight TextBox value...

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

Console.WriteLine(Clipboard.GetText());
Foi útil?

Solução

looks like the message loop needs to be executed before the text is placed in the clipboard

try using

  Application.DoEvents();

instead of the delay

Outras dicas

 SendKeys.SendWait("^c");
 Clipboard.GetText(TextDataFormat.Text);

Try this:

textBox1.Focus();
Clipboard.SetText(textBox1.Text);
textBox2.Text = Clipboard.GetText();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top