[英]How do I copy from, erase, then paste back into the clipboard?
我必须自动化我无法控制的程序。 我这样做的方法是对其他程序使用SendKeys.SendWait("keys")
。 问题是,可能有多个字段处于活动状态,并且无法自信地选择单个字段。 这些字段的长度都是不同的,所以我的解决方案是复制很长的内容,将其复制到剪贴板,然后查看最后一个字符,因此我知道在其他程序中选择了哪个字段。 不幸的是,这将覆盖剪贴板。
所以,我需要做这些事情。
理想情况下,它将能够从剪贴板复制任何内容(图像,文本,富文本格式)并将其放回原处,就像什么也没发生一样。 这是到目前为止的内容,但是它会擦除剪贴板中的所有内容,或者将其替换为无法粘贴回记事本的特殊内容。
AppActivate("OtherProgram")
Dim oldClipboard As IDataObject = Clipboard.GetDataObject
//'Type long stuff, select all, cut to clipboard
SendKeys.SendWait("{ESC}{F3}1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "+{HOME}^x")
Dim selectedFieldText As String = Clipboard.GetText
Dim lastChar As String = selectedFieldText.Substring(selectedFieldText.Length - 1, 1)
Select Case lastChar
Case "4"
//'do nothing. We're in the correct field.
Case "J"
SendKeys.SendWait("+{TAB}")
Case "O"
SendKeys.SendWait("+{TAB}+{TAB}")
//'...and so on
End Select
//'Send data to the correct field in "OtherProgram"
Clipboard.SetDataObject(oldClipboard)
UI Automation名称空间可能包含适合您的解决方案。 我会针对对象进行测试,因为并非所有内容都符合要求,但几乎所有内容都符合自动化要求。 文本自动化功能可以查看长度。 http://msdn.microsoft.com/zh-CN/library/system.windows.automation.textpattern.getselection.aspx也可以使用UI Spy.exe http://msdn.microsoft.com/zh-cn/library/ ms727247.aspx,以了解如何布置表单以使用UI自动化进行交互。
运气。
您无法如实地将剪贴板还原到其先前的状态,并且当您尝试这样做时,将会与其他监视剪贴板事件的应用程序引起无法预料的混乱。 请参阅我对以下问题的先前答案: 如何安全正确地创建Windows剪贴板的备份?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.