Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SendInput Ctrl+;C,然后通过剪贴板检索复制的内容。GetText不';行不通_C#_Winforms_Clipboard_Sendinput - Fatal编程技术网

C# SendInput Ctrl+;C,然后通过剪贴板检索复制的内容。GetText不';行不通

C# SendInput Ctrl+;C,然后通过剪贴板检索复制的内容。GetText不';行不通,c#,winforms,clipboard,sendinput,C#,Winforms,Clipboard,Sendinput,我有一个简单的windows窗体应用程序,带有文本框和按钮。单击按钮将焦点放在文本框上,并模拟击键Ctrl+C,将内容复制到剪贴板中。我正在使用SendInput进行按键模拟,还尝试了SendKeys.Send(“^c”)。这适用于复制操作,我可以通过将内容粘贴到记事本或其他东西来验证 然后,我希望通过剪贴板.GetText以编程方式检索复制的值。但是,问题是此方法似乎总是返回剪贴板中的上一个值,而不是当前值。例如,如果我的文本框的值序列是:“hello”,“world”,那么输出序列是:jun

我有一个简单的windows窗体应用程序,带有
文本框
按钮
。单击
按钮
将焦点放在
文本框
上,并模拟击键
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);