Как мне скопировать, удалить, затем вставить обратно в буфер обмена? - PullRequest
1 голос
/ 27 июля 2010

Я должен автоматизировать программу, которая находится вне моего контроля. Я делаю это, используя 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)

Ответы [ 3 ]

2 голосов
/ 27 июля 2010

Если вы еще не много работали над этим проектом, я очень рекомендую AutoIt .

Это язык программирования, созданный специально для автоматизации существующих программ. Поскольку вы используете vb.net, он имеет знакомый синтаксис BASIC.

Он будет нажимать кнопки, обрабатывать буфер обмена и генерировать собственный исполняемый файл.

Построить хороший гайс в нем очень легко. Он зрелый, стабильный и бесплатный!

Действительно, сделайте себе одолжение и проверьте это .

1 голос
/ 27 июля 2010

Пространство имен UI Automation может содержать решение для вас. Я бы проверил его на предмет, потому что не все соответствует, но почти все соответствует автоматизации. Автоматизация текста имеет возможность видеть длину. http://msdn.microsoft.com/en-us/library/system.windows.automation.textpattern.getselection.aspx Также используйте пользовательский интерфейс Spy.exe http://msdn.microsoft.com/en-us/library/ms727247.aspx, чтобы увидеть, как формы располагаются для взаимодействия с помощью автоматизации пользовательского интерфейса.

Удача.

0 голосов
/ 04 августа 2010

Вы не можете точно восстановить буфер обмена до его прежнего состояния, и, пытаясь это сделать, вы будете вызывать непредсказуемый беспорядок с другими приложениями, которые отслеживают события буфера обмена.Смотрите мой предыдущий ответ на этот вопрос: Как мне безопасно и правильно создать резервную копию буфера обмена Windows?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...