繁体   English   中英

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

[英]How do I copy from, erase, then paste back into the clipboard?

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

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

  1. 将剪贴板内容(可以是任何内容)复制到变量中。
  2. 将一堆东西发送到另一个程序并复制它。 然后使用它做其他事情。
  3. 将第一个变量复制回剪贴板。

理想情况下,它将能够从剪贴板复制任何内容(图像,文本,富文本格式)并将其放回原处,就像什么也没发生一样。 这是到目前为止的内容,但是它会擦除剪贴板中的所有内容,或者将其替换为无法粘贴回记事本的特殊内容。

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

它是一种编程语言,仅用于自动化现有程序。 由于您正在使用vb.net,因此它具有熟悉的BASIC语法。

它将单击按钮,处理剪贴板并生成本机可执行文件。

在其中构建漂亮的GUI非常容易。 它是成熟,稳定和免费的!

真的,请帮个忙, 看看吧

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM