Что нового

Как получить форматированный текст из буфера обмена?

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вот если скопировать какой-нибудь текст из браузера или, например, из Word документа, он скопируется в буфер обмена вместе с форматированием (шрифт, цвет, отступы, таблицы, картинки и т.д).
Вопрос: как через AutoIt в переменную получить этот отформатированный текст? Функция
Код:
ClipGet()
возвращает обычный чистый текст, без всякого форматирования и тегов разметки...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
См. примеры в справке по UDF Clipboard.au3
Стандартные форматы там перечислены. По нестандартным можно так:
- получаем имя формата через _ClipBoard_FormatStr() (например, "Rich Text Format" или "HTML Format")
- регистрируем данный формат и получаем по нему данные
Код:
$iFormat = _ClipBoard_RegisterFormat("Rich Text Format")
If $iFormat <> 0 Then $iData = _ClipBoard_GetData($iFormat)
ConsoleWrite(BinaryToString($iData) & @CRLF)

- разбираем данные


Добавлено:
Сообщение автоматически объединено:

Ещё можно перечислить форматы и забирать данные по идентификатору без регистрации
Код:
#include <Clipboard.au3>

$iFormat = 0

$hGUI = GUICreate("Clipboard")

If _ClipBoard_Open($hGUI) Then
  Do
    $iFormat = _ClipBoard_EnumFormats($iFormat)
    If $iFormat <> 0 Then
      ConsoleWrite("CF_ID " & $iFormat & " : " & _ClipBoard_FormatStr($iFormat) & @CRLF)
    EndIf
  Until $iFormat = 0
  _ClipBoard_Close()
EndIf

ConsoleWrite(BinaryToString(_ClipBoard_GetData(49326)) & @CRLF) ; Rich Text Format

Результат перечисления после копирования из IE части текста этой темы
Код:
CF_ID 49161 : DataObject
CF_ID 1 : Text
CF_ID 13 : Unicode Text
CF_ID 49425 : HTML Format
CF_ID 49326 : Rich Text Format
CF_ID 49621 : msSourceUrl
CF_ID 49171 : Ole Private Data
CF_ID 16 : Locale
CF_ID 7 : OEM Text
 
Верх