如何使用 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# textbox 限制输入长度大于等于2小于等于10(汉子算两个长度)且不能ctrl+v和右键粘贴