我必须自动化一个不受我控制的程序。我这样做的方式是将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)
AutoIt/AutoHotKey是我的计划“B”。如果我无法顺利解决问题,我会使用其中的一个。可以使用命令行参数启动编译的AutoIt脚本吗? – Grant 2010-07-26 20:44:27
@Grant,是的。 http://www.autoitscript.com/autoit3/docs/intro/running.htm#CommandLine – 2010-07-26 22:38:54
所以,我实际上并没有使用AutoIt这个程序,但事实证明,您可以直接链接AutoItX3.dll文件并直接使用它在节目中。 VB.NET中的autoit.WinActive(“其他程序”)就像WinActive(“Other Program”)脚本一样。便利。 – Grant 2010-07-29 15:11:21