C# SendInput Ctrl+;C,然后通过剪贴板检索复制的内容。GetText不';行不通
我有一个简单的windows窗体应用程序,带有C# SendInput Ctrl+;C,然后通过剪贴板检索复制的内容。GetText不';行不通,c#,winforms,clipboard,sendinput,C#,Winforms,Clipboard,Sendinput,我有一个简单的windows窗体应用程序,带有文本框和按钮。单击按钮将焦点放在文本框上,并模拟击键Ctrl+C,将内容复制到剪贴板中。我正在使用SendInput进行按键模拟,还尝试了SendKeys.Send(“^c”)。这适用于复制操作,我可以通过将内容粘贴到记事本或其他东西来验证 然后,我希望通过剪贴板.GetText以编程方式检索复制的值。但是,问题是此方法似乎总是返回剪贴板中的上一个值,而不是当前值。例如,如果我的文本框的值序列是:“hello”,“world”,那么输出序列是:jun
文本框
和按钮
。单击按钮
将焦点放在文本框
上,并模拟击键Ctrl+C
,将内容复制到剪贴板中。我正在使用SendInput
进行按键模拟,还尝试了SendKeys.Send(“^c”)
。这适用于复制操作,我可以通过将内容粘贴到记事本或其他东西来验证
然后,我希望通过剪贴板.GetText
以编程方式检索复制的值。但是,问题是此方法似乎总是返回剪贴板中的上一个值,而不是当前值。例如,如果我的文本框的值序列是:“hello”,“world”,那么输出序列是:junk,“hello”。下面是我使用SendKeys
方法编写的代码,以简化操作:
... highlight TextBox value...
SendKeys.Send("^c");
Thread.Sleep(100);
Console.WriteLine(Clipboard.GetText());
试试这个:
textBox1.Focus();
Clipboard.SetText(textBox1.Text);
textBox2.Text = Clipboard.GetText();
试试这个:
textBox1.Focus();
Clipboard.SetText(textBox1.Text);
textBox2.Text = Clipboard.GetText();
在将文本放入剪贴板之前,似乎需要执行消息循环
试用
Application.DoEvents();
在将文本放入剪贴板之前,需要执行消息循环,而不是延迟
SendKeys.SendWait("^c");
Clipboard.GetText(TextDataFormat.Text);
试用
Application.DoEvents();
您也可以使用textBox1.Copy来代替延迟
和textBox2.Paste
而不是Clipboard.SetText()
和Clipboard.GetText()
当然,但它只在选中文本时才起作用,否则它将保留剪贴板上以前的内容。感谢您的建议,我没有尝试过这些方法,但我认为它们会起作用。然而,出于我的应用程序和原始问题的目的,我需要模拟Ctrl+C键盘事件,看起来就像下面有人建议的那样执行application.DoEvents
。你也可以使用textBox1.Copy
和textBox2.Paste
而不是Clipboard.SetText()
和Clipboard.GetText()
当然,但它只在选中文本时才起作用,否则它将保留剪贴板上以前的内容。感谢您的建议,我没有尝试过这些方法,但我认为它们会起作用。但是,为了我的应用程序和原始问题的目的,我需要模拟Ctrl+C键盘事件,看起来就像下面有人建议的那样执行application.DoEvents
。
SendKeys.SendWait("^c");
Clipboard.GetText(TextDataFormat.Text);