如何复制,擦除,然后粘贴回剪贴板?

时间:2010-07-26 20:34:24

标签: vb.net clipboard

我必须自动化一个超出我控制范围的程序。我这样做的方法是将SendKeys.SendWait("keys")用于其他程序。问题是,有多个字段可能处于活动状态,无法自信地选择单个字段。这些字段都是不同的长度,所以我的解决方案是复制一些非常长的东西,将它复制到剪贴板,然后查看最后一个字符,所以我知道在另一个程序中选择了哪个字段。不幸的是,这会覆盖剪贴板。

所以,我需要做这些事情。

  1. 将剪贴板内容(可以是任何内容)复制到变量中。
  2. 将一堆东西发送到另一个程序并复制它。然后用它做其他事情。
  3. 将第一个变量复制回剪贴板。
  4. 理想情况下,它可以从剪贴板中复制任何内容(图像,文本,富文本)并将其放回原处,就像没有发生任何事情一样。这是我到目前为止所做的,但它会删除剪贴板中的任何内容,或者将其替换为无法粘贴回记事本的特殊内容。

    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)
    

3 个答案:

答案 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?

相关问题