Jajajaja.....gna08 lo decía en broma hombre!
.
Además, como siempre canté victoria antes de tiempo. No comprobé copiar texto de varios programas y ahora he visto que no funciona con todos. Como se dijo anteriormente esto parece que se comunica unos programas con otros. Estos formatos que he añadido funcionan por ejemplo con el IE, con el Wordpad, etc....pero con otros falla
. He intentado un montón de cosas pero no ha funcionado nada. A ver si alguien consigue algo
.
Bueno, al lio. He variado la función _ClipBoard_GetData y le he añadido dos formatos más, uno que devuelve el texto en formato rtf y el otro en html. Para que la función devuelva el texto en formato rtf debes poner el valor 19 y para el html el 20. Ya he dicho que no funciona con todas las copias de texto de todos los programas y controles.
Código: Seleccionar todo
; #FUNCTION# ====================================================================================================================
; Nombre...........: _ClipBoard_GetDataAlternative
; Descripción ...: Recibe los datos del clipboard (portapapeles) en el formato que le digas (texto, texto unicode, rtf, Html, binario, etc).
; Sintasis.........: _ClipBoard_GetDataAlternative ([$Formato = 0])
; Parametros ....: $iFormat - Especifica el formato del clipboard:
; |$CF_TEXT - Text format (Formato texto)
; |$CF_BITMAP - Handle to a bitmap (HBITMAP)
; |$CF_METAFILEPICT - Handle to a metafile picture (METAFILEPICT)
; |$CF_SYLK - Microsoft Symbolic Link (SYLK) format
; |$CF_DIF - Software Arts' Data Interchange Format
; |$CF_TIFF - Tagged image file format
; |$CF_OEMTEXT - Text format containing characters in the OEM character set
; |$CF_DIB - BITMAPINFO structure followed by the bitmap bits
; |$CF_PALETTE - Handle to a color palette
; |$CF_PENDATA - Data for the pen extensions to Pen Computing
; |$CF_RIFF - Represents audio data in RIFF format
; |$CF_WAVE - Represents audio data in WAVE format
; |$CF_UNICODETEXT - Unicode text format
; |$CF_ENHMETAFILE - Handle to an enhanced metafile (HENHMETAFILE)
; |$CF_HDROP - Handle to type HDROP that identifies a list of files
; |$CF_LOCALE - Handle to the locale identifier associated with text in the clipboard
; |$CF_DIBV5 - BITMAPV5HEADER structure followed by bitmap color and the bitmap bits
; |$CF_OWNERDISPLAY - Owner display format
; |$CF_DSPTEXT - Text display format associated with a private format
; |$CF_DSPBITMAP - Bitmap display format associated with a private format
; |$CF_DSPMETAFILEPICT - Metafile picture display format associated with a private format
; |$CF_DSPENHMETAFILE - Enhanced metafile display format associated with a private format
; Le he añadido dos nuevos formatos:
; 18 - Formato texto rtf (Rich Text Format - Formato de texto enriquecido)
; 19 - Formato Html
; Valores devueltos.: Exito - Devuelve el texto copiado en el clipboard en el formato especificado
; - @extended da la longitud del texto devuelto o de los bytes
; Fallo - 0
; Author ........: Paul Campbell (PaulIA)
; Modificaciones.: Gary Frost,
; Ascend4nt (now follows traditional ClipBoard 'get' code, fixed $CF_UNICODETEXT errors)
; Chefito,
; Es una modificación de la función original _ClipBoard_GetData para que pueda devolver el texto en los formatos rtf y html
; Comentarios ...: Esta función devuelve los datos que tiene almacenados el clipboard en el formato que le especifiques.
; Para que funcione necesitas importar la librería udf Clipboard.au3 (#include <ClipBoard.au3>), ya que
; utiliza varias funciones de esta librería.
; Relacionadas .......: _ClipBoard_GetData, _ClipBoard_GetDataEx, _ClipBoard_SetData
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _ClipBoard_GetDataAlternative($Formato = 1)
If Not (_ClipBoard_IsFormatAvailable($Formato) Or $Formato=18 Or $Formato=19) Then Return SetError(-1, 0, 0)
If Not _ClipBoard_Open(0) Then Return SetError(-2, 0, 0)
Switch $Formato
Case 18
$iFormat=_ClipBoard_RegisterFormat ("Rich Text Format")
If $iFormat=0 Then Return SetError(-1, 0, 0)
Case 19
$iFormat=_ClipBoard_RegisterFormat ("HTML Format")
If $iFormat=0 Then Return SetError(-1, 0, 0)
Case Else
$iFormat=$Formato
EndSwitch
Local $hMemory = _ClipBoard_GetDataEx($iFormat)
;_ClipBoard_Close() ; moved to end: traditionally done *after* copying over the memory
If $hMemory=0 Then
_ClipBoard_Close()
Return SetError(-3, 0, 0)
EndIf
Local $pMemoryBlock=_MemGlobalLock($hMemory)
If $pMemoryBlock=0 Then
_ClipBoard_Close()
Return SetError(-4,0,0)
EndIf
; Get the actual memory size of the ClipBoard memory object (in bytes)
Local $iDataSize=_MemGlobalSize($hMemory)
If $iDataSize = 0 Then
_MemGlobalUnlock($hMemory)
_ClipBoard_Close()
Return SetError(-5,0,"")
EndIf
Local $tData
Switch $Formato
Case $CF_TEXT, $CF_OEMTEXT, 18, 19, 20
$tData = DllStructCreate("char[" & $iDataSize & "]", $pMemoryBlock)
Case $CF_UNICODETEXT
; Round() shouldn't be necessary, as CF_UNICODETEXT should be 2-bytes wide & thus evenly-divisible
$iDataSize=Round($iDataSize/2)
$tData = DllStructCreate("wchar[" & $iDataSize & "]", $pMemoryBlock)
Case Else
; Binary data return for all other formats
$tData = DllStructCreate("byte[" & $iDataSize & "]", $pMemoryBlock)
EndSwitch
; Grab the data from the Structure so the Memory can be unlocked
Local $vReturn = DllStructGetData($tData, 1)
; Unlock the memory & Close the clipboard now that we have grabbed what we needed
_MemGlobalUnlock($hMemory)
_ClipBoard_Close()
; Return the size of the string or binary object in @extended
Return SetExtended($iDataSize, $vReturn)
EndFunc ;==>_ClipBoard_GetData
Es una lástima que no funcione con todos
.
Mi idea era coger el texto en formato rtf para luego tratar las etiquetas con otras funciones y ver su formato.
En microsoft está la especificacion del rtf.
Y si recuperas el texto en formato html, te devuelve una cabecera con información del texto copiado el cual habría que quitar para que funcionase como página html.
Luego encontré este script en el foro de habla inglesa:
http://www.autoitscript.com/forum/index ... ntry763027
Con este script se recupera el formato del texto de los controles. Pero como dije anteriormente no funciona con todos.
Utiliza apis y la estructura $tagTEXTMETRIC para sacar el formato del texto del objeto.
He intentado también recuperar la información con la estructura $tagLOGFONT, pero con poco éxito.
Y para recuperar el color del texto del objeto supongo que se podría hacer con la api GetTextColor. Haciendo una búsqueda en el foro ingles he encontrado esta api definada en este post:
http://www.autoitscript.com/forum/index ... ntry665511
A ver si con toda esta información alguien consigue algo, pero lo veo dificil.
Saludos.....aaahhhh gna08, con esto he demostrado que no soy un master, ya que no he podido resolverlo
. Lástima
.