我必须自动化一个超出我控制范围的程序。我这样做的方法是将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)
答案 0 :(得分:2)
如果你还没有对这个项目进行过多次编码,我强烈推荐AutoIt。
它是一种仅为现有程序的自动化而构建的编程语言。由于您使用的是vb.net,因此它具有熟悉的BASIC语法。
它将单击按钮,处理剪贴板并生成本机可执行文件。
在其中构建漂亮的guis非常容易。它成熟,稳定,自由!
真的,帮自己一个忙,check it out。
答案 1 :(得分:1)
UI自动化名称空间可能包含一个解决方案。我会针对该对象进行测试,因为并非一切都符合,但几乎所有内容都符合自动化。文本自动化能够查看长度。 http://msdn.microsoft.com/en-us/library/system.windows.automation.textpattern.getselection.aspx也使用UI Spy.exe http://msdn.microsoft.com/en-us/library/ms727247.aspx了解如何使用UI自动化进行交互。
运气。
答案 2 :(得分:0)
您无法忠实地将剪贴板恢复到其先前状态,并且当您尝试这样做时,您将会与监视剪贴板事件的其他应用程序造成不可预测的混乱。请参阅我之前对此问题的回答: How do I safely and correctly create a backup of the Windows clipboard?