如何使用 C# 模拟 CTRL+V 击键(粘贴)

Posted

技术标签:

【中文标题】如何使用 C# 模拟 CTRL+V 击键(粘贴)【英文标题】:How simulate CTRL+V keystrokes (paste) using C# 【发布时间】:2013-03-15 07:24:18 【问题描述】:

我们如何使用 C# 模拟 CTRL+V 键(粘贴)?

我有一个没有用于访问的 ID 的文本框,例如 textbox1.Text = someValue 在这里不起作用。 我想通过单击来填充该文本框(从剪贴板)。由于某些原因,我们确实需要模拟 CTRL+V,这意味着我们不能使用像 inputsimulator 这样的外部库。

【问题讨论】:

需要更多信息 - 你能对文本框进行子类化吗?您使用的是 Silverlight、WinForms 还是 WPF?为什么您无法获得对文本框的引用? @Alex G 我正在使用 winform 中的 webbrowser 控件,导航到特定页面后,我无法通过它的 id 访问 webbrowser 中的目标文本框。 如果你的文本框在浏览器中,这根本不是 winforms 的问题,而是 html 脚本 如何找到文本框?你能得到文本框窗口的句柄吗?这将是一种比模拟击键更好的插入文本的方法。 我通过模拟鼠标位置单击该文本框,然后单击。我真的很想学习如何用 c# 语言模拟 ctrl+v 亲爱的 Jonathan Wood 【参考方案1】:

字符与键

% => alt , + => shift^ 用于发送 ctrl 密钥

原答案:

下面解释了单个修饰键与另一个键的模拟 Step1: 聚焦文本框,您要在其上执行两个键,然后 Step2: 发送键,例如 control-v 将像"^v" 一样发送。这是代码

target_textBox.Focus();
SendKeys.Send("^v");

target_textBox.Focus(); 仅在发送密钥时目标文本框未聚焦时才需要

更新:对于发送三个键(两个修改键加上其他键)喜欢实现ctrl shift F1你将发送以下

^+F1

Microsoft Docs Ref

【讨论】:

感谢您的回答,亲爱的 Sami,shift+home 和 shift+end 呢? @MoonLight - 这是一个链接,其中包含有关所有不同组合的大量有用信息。 msdn.microsoft.com/en-us/library/… 如果您正在谈论发送这些密钥,那么我认为 "+home" "+end" 会起作用【参考方案2】:

为什么不覆盖 TextBox OnClick 事件,而不是在调用事件时,将 Text 属性设置为 Clipboard.GetText()

喜欢:

private void textBox1_Click ( object sender, EventArgs e )

        textBox1.Text = Clipboard.GetText ();

【讨论】:

我想投票给你,因为我知道了一件我不知道的事情,但很抱歉它对我不起作用,你试过了吗? 你有没有把它添加到 TextBox 的 Click 事件中? 对不起,我错过了分配,只是使用了Clipboard.GetText ();,但现在它可以处理任何事件(不仅是点击),因为它应该......【参考方案3】:

这个函数已经内置:TextBoxBase.Paste()

textbox1.Paste();

【讨论】:

【参考方案4】:

一些 JS 不允许以通常的方式改变值

inputList[21].SetAttribute("value", txtEMail.Text);

你应该试试这样的:

inputElement.InvokeMember("focus");
inputElement.InvokeMember("click"); //sometimes helpfull
Clipboard.SetDataObject(txtEMail.Text);
SendKeys.Send("^(v)");

//但不是“^v”

【讨论】:

以上是关于如何使用 C# 模拟 CTRL+V 击键(粘贴)的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中,文本框不能粘贴功能

如何修复“忽略的击键”

c# textbox 限制输入长度大于等于2小于等于10(汉子算两个长度)且不能ctrl+v和右键粘贴

使用 C# 模拟键盘

如何使用 JavaScript 检测 Ctrl+V、Ctrl+C?

如何使用 JavaScript 检测 Ctrl+V、Ctrl+C?