Перейти к содержимому

Фотография

Как получить значение определённого формата из буфера обмена


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 owasp

owasp

    Активный участник

  • Members
  • PipPip
  • 87 сообщений

Отправлено 13 марта 2012 - 16:57

В TestComplete (версия 7) есть объект Sys.Clipboard. В тесте активно его использую.

Работу с нестандартным гридом организовал через последовательный обход строк и получения значения ячеек черз копирование их значения (другиим способами невозможно получить значения ячеек, OCR распознаёт только все стороки сразу, отдельную не получается указать).

Делается так:
  • содержимое Sys.Clipboard соханяется в переменную (на этом этапе часто возникают ошибки чтения из буфера обмена)
  • копирую значение ячейки, обрабатываю его
  • содержимое Sys.Clipboard восстанавливается из переменной (на этом этапе теряется часть форматов, назад присваиваются только текстовые форматы)

Так вот. При вызове Sys.Clipboard (интенсивное использование) часто появляются ошибки в тестируемом приложении. И грид этот в буфер обмена помещает не только текст, но форматированный текст (html). Как можно получить определённый формат из буфера обмена (html, rtf, ...)?

Может кто уже писал для себя совй метод через вызов функций через плагин Win32API или напрямую из user32.dll? Надеюсь при этом сделать тест более стабильным и получить возможность работы с форматированным текстом.

update. Попробую на основе описаний в MSDN и руководства "Работа с буфером обмена (clipboard)": http://www.excode.ru/art6846p1.html чего-нибудь сделать.
  • 0

#2 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 14 марта 2012 - 07:26

Если на компьютере имеется .NET 3+, то вместо Sys.Clipboard можно использовать .NET класс System.Windows.Clipboard. Например, так:
// JScript
var FORMAT_RTF = dotNET.System_Windows.DataFormats.Rtf;
var oClip, oData, strRtf;

oClip = dotNET.System_Windows.Clipboard;
oData = oClip.GetDataObject();
if (oData.GetDataPresent(FORMAT_RTF))
{
  var strRtf = oData.GetData(FORMAT_RTF).OleValue;
  Log.Message(strRtf);
}
Для работы такого скрипта надо в проектные настройки CLR Bridge добавить PresentationCore.dll. Также может понадобиться выбрать опцию Single-threaded apartment; по крайней мере, у меня без этой опции GetDataObject не работает. 
  • 1


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных