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

12

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

我有一个没有id用于访问的文本框,例如textbox1.Text = someValue在这里无法工作。
我想通过单击它来填充该文本框(从剪贴板)。由于某些原因,我们确切地需要模拟CTRL+V,也就是说我们不能使用外部库,比如inputsimulator


需要更多信息 - 你能够子类化文本框吗?你是在Silverlight、WinForms还是WPF中?为什么无法获取到文本框的引用? - Alex
@Alex G,我正在Winform中使用WebBrowser控件,在导航到特定页面后,我无法通过其ID访问WebBrowser中的目标文本框。 - SilverLight
如果您的文本框在Web浏览器中,这根本不是WinForms问题,而是关于HTML脚本的问题。 - madd0
1
你觉得如何找到文本框?能否获取文本框窗口的句柄?这比模拟按键更好地插入文本。 - Jonathan Wood
我正在模拟鼠标位置和点击来单击那个文本框。我真的很想学习如何使用C#语言模拟ctrl+v。亲爱的Jonathan Wood。 - SilverLight
5个回答

27

字符与按键

% => alt+ => shift,而^用于ctrl键。

原始答案:

下面解释了如何使用另一个键模拟单个修改键的操作。 步骤1:聚焦于您要执行两个键的文本框,然后步骤2:发送键,例如control-v将被发送为"^{v}"。以下是代码:

target_textBox.Focus();
SendKeys.Send("^{v}");
target_textBox.Focus(); 只有在目标文本框没有聚焦的情况下发送按键时才需要使用。 更新:如果要发送三个按键(两个修改键加上其他按键),例如实现 ctrl shift F1,则需要发送以下内容: ^+{F1} Microsoft Docs Ref

感谢您的回答,亲爱的Sami,那么Shift+Home和Shift+End呢? - SilverLight
@MoonLight - 这里有一个链接,包含了所有不同组合的有用信息。http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.100).aspx - Jon Raynor
如果你想发送这些键,我认为 "+{home}" "+{end}" 可以起作用。 - Sami
1
注意:如果您想在WinForm上下文之外使用它,例如在LinqPad中,您需要使用“SendKeys.SendWait(“^{v}”);”才能使其正常工作。 - Matt

3
为什么不重写TextBox的OnClick事件,当事件被调用时,将Text属性设置为Clipboard.GetText()?
例如:
private void textBox1_Click ( object sender, EventArgs e )
{
        textBox1.Text = Clipboard.GetText ();
}

我本想给你点赞,因为我学到了一件不知道的事情,但很抱歉它对我不起作用,你试过吗? - Sami
你已经将它添加到TextBox的Click事件中了吗? - rut0.wut
抱歉我错过了这个任务,只是使用了 Clipboard.GetText(); 但现在它可以与任何事件一起工作(不仅限于点击)。 - Sami

1

0

如果操作系统的语言不是英语,则此选项可能无法正常工作:

SendKeys.Send("^{v}");

那么尝试这个选项:

SendKeys.Send("+{INSERT}");

0

有些JS不允许以通常的方式更改值

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

你应该尝试类似这样的代码:

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

//但不包括“^{v}”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接