Página 1 de 1

Autodetector de fuente usada...

Publicado: 05 Feb 2010, 20:56
por Charlie19
Hola a todos/as,
ahora que domino lo básico en Autoit quiero aprender. Y pensando pensando se me ha ocurrido crear un programa que a poder ser sea con Autoit ( ya que se programar ; y si es java ".js" pues :smt030 ), para poder averiguar la fuente y color usada en una frase/letra.
Ej.
Uso Arial ( en color verde). Y al poner en el recuadro Arial ( quien dice recuadro dice cualquier cosa) me diga.
Fuente : Arial
Negrita : N/A
Subrayado : N/A
Color : Verde ( no quiero que diga verde oscuro o 0x000234 xd [aunque este ultimo no estaria mal] ).

Se entiende?? Gracias :) :smt024

Re: Autodetector de fuente usada...

Publicado: 06 Feb 2010, 14:55
por Nahuel
Mm, a ver si entendí. Querés hacer un programa que contenga un recuadro en el cual puedas introducir texto con cierto formato y querés que el programa identifique fuente y color...

Visto así, no lo veo posible. Primero porque el formato de texto en sí no es una... propiedad intrínseca (por decirlo así) del texto, sino que es dado por el programa con el que estás trabajando el texto. Al pegarlo en cualquier otro lado perdería el formato, claro (porque bueno, en realidad nunca lo tuvo).

Re: Autodetector de fuente usada...

Publicado: 07 Feb 2010, 20:22
por gna08
Nahuel escribió:Mm, a ver si entendí. Querés hacer un programa que contenga un recuadro en el cual puedas introducir texto con cierto formato y querés que el programa identifique fuente y color...

Visto así, no lo veo posible. Primero porque el formato de texto en sí no es una... propiedad intrínseca (por decirlo así) del texto, sino que es dado por el programa con el que estás trabajando el texto. Al pegarlo en cualquier otro lado perdería el formato, claro (porque bueno, en realidad nunca lo tuvo).

mm nose... si bien es muuy cierto lo k decis pero tambien es cierto k si uno copia del IE y pega en el Word, el formato sigue siendo igual y sin perdida.. al igual k con controles del RICHEDIT... asik pienso k si es posible :smt021
jaja saludos :smt020

Re: Autodetector de fuente usada...

Publicado: 09 Feb 2010, 03:20
por Nahuel
Si es cierto, pero eso es una forma de... interacción, por decirlo así, entre el explorador y Word. Quiero suponer que si uno copia un texto de un explorador con una fuente exótica (que no esté instalada en nuestro sistema) no se vería igual en Word. Por lo que, pienso yo, para poder lograr lo que él quiere se debería tener una amplia colección de fuentes O el programa debería trabajar de forma similar a word y analizar el portapapeles, por lo que sería necesario un manejo avanzado del mismo.

Re: Autodetector de fuente usada...

Publicado: 11 Feb 2010, 10:37
por Chefito
Jejejeje.....este post se posteó en el foro de "Preguntas sencillas", y como creí que no era tan sencilla la cosa lo cambié a este. Por lo que he visto acerté :smt003 .

Mmmmm......yo es que estoy un poco confundido. No se si lo que quiere es averiguar el formato del texto de un control o el que se copia en el clipboard (portapapeles).
Si es averiguar el formato de texto de un control, para eso habría que utilizar apis a manta.....como no :smt002 . Y sabiendo que apis tienes que utilizar pues a lo mejor encuentras algo en el foro ingles. Yo encontré un script que más o menos te daba esa información (luego posteo el enlace que ahora mismo no lo recuerdo), pero eso tenía un problema. No funciona con todos los controles o programas. Por ejemplo, en los editores de texto, los controles donde escribes (ejemplo RichEdit entre otros) pueden contener trozos de textos con varios formatos diferentes, por lo tanto estas apis te van a devolver casi seguro el formato del sistema. También está el problema de los navegadores, por ejemplo el internet explorer, que como son controles "especiales" (clases envolventes) son dificilisimos de atacar, y encima seguimos teniendo el mismo problema que comenté anteriormente. Lo dicho, funcionaría con los controles típicos de windows.

Luego está el tema de ver el formato de lo copiado en el clipboard. Esto es bastante complicado. Además, seguimos teniendo el mismo problema que antes.....podemos copiar texto con diferentes formatos :smt012 . Pero no pasa nada :smt005 . Para eso están las cabezas pensantes.
Me puse a pensar en alguna forma de hacerlo y se me ocurrió una pequeña triquiñuela que diría el formato de todo el texto copiado, incluso si éste tiene trozos con distinto formato :smt005 . Va ha ser algo laborioso, pero yo daré la idea y al que le interese que la desarrolle más a fondo.
Cuando haga una pequeña función posteo todo el código y las posibles alternativa.

Saludos.

Re: Autodetector de fuente usada...

Publicado: 11 Feb 2010, 22:32
por gna08
Chefito escribió:Jejejeje.....este post se posteó en el foro de "Preguntas sencillas", y como creí que no era tan sencilla la cosa lo cambié a este. Por lo que he visto acerté :smt003 .

Mmmmm......yo es que estoy un poco confundido. No se si lo que quiere es averiguar el formato del texto de un control o el que se copia en el clipboard (portapapeles).
Si es averiguar el formato de texto de un control, para eso habría que utilizar apis a manta.....como no :smt002 . Y sabiendo que apis tienes que utilizar pues a lo mejor encuentras algo en el foro ingles. Yo encontré un script que más o menos te daba esa información (luego posteo el enlace que ahora mismo no lo recuerdo), pero eso tenía un problema. No funciona con todos los controles o programas. Por ejemplo, en los editores de texto, los controles donde escribes (ejemplo RichEdit entre otros) pueden contener trozos de textos con varios formatos diferentes, por lo tanto estas apis te van a devolver casi seguro el formato del sistema. También está el problema de los navegadores, por ejemplo el internet explorer, que como son controles "especiales" (clases envolventes) son dificilisimos de atacar, y encima seguimos teniendo el mismo problema que comenté anteriormente. Lo dicho, funcionaría con los controles típicos de windows.

Luego está el tema de ver el formato de lo copiado en el clipboard. Esto es bastante complicado. Además, seguimos teniendo el mismo problema que antes.....podemos copiar texto con diferentes formatos :smt012 . Pero no pasa nada :smt005 . Para eso están las cabezas pensantes.
Me puse a pensar en alguna forma de hacerlo y se me ocurrió una pequeña triquiñuela que diría el formato de todo el texto copiado, incluso si éste tiene trozos con distinto formato :smt005 . Va ha ser algo laborioso, pero yo daré la idea y al que le interese que la desarrolle más a fondo.
Cuando haga una pequeña función posteo todo el código y las posibles alternativa.

Saludos.
Es cierto pero en si la idea ya k digamos k no se puede pork el portapapeles pierde dicho formato,, seria tambien valido pork no usar/hacer una herramienta similar al Au3info.. de k asentar el mouse sobre un control y este se muetre info directamente. ya k perderiamos el formato en el portapapels a no ser k sea controles similares a RichEdit como dijimos.. nose :O kisas apis.. no keda otra jaj :smt030
Saludos

Re: Autodetector de fuente usada...

Publicado: 11 Feb 2010, 22:44
por Chefito
A ver gna08, cuando yo digo que se recuperar el formato del texto del portapapeles es que se puede :smt002 :smt002 :smt016 :smt016 :smt005 :smt005 .
No dudes de mis palabras :smt002 . Se recupera de una forma no habitual. Habrá que tratar el texto recuperado previamente.
A ver si me pongo con la función y la acabo esta noche. Es que he estado de cervezas todo el día :smt005 :smt030 .

Re: Autodetector de fuente usada...

Publicado: 11 Feb 2010, 23:55
por gna08
Chefito escribió:A ver gna08, cuando yo digo que se recuperar el formato del texto del portapapeles es que se puede :smt002 :smt002 :smt016 :smt016 :smt005 :smt005 .
No dudes de mis palabras :smt002 .
sorry master! :smt005 . bueno cheeeeeeee jajaja. no me retes. k no me di cuenta jejej.. :smt021

veremos k sale. saludos y suerte con las cerbezas :smt044

Re: Autodetector de fuente usada...

Publicado: 12 Feb 2010, 02:35
por Chefito
Jajajaja.....gna08 lo decía en broma hombre! :smt005 .
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 :smt017 . He intentado un montón de cosas pero no ha funcionado nada. A ver si alguien consigue algo :smt024 .

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 :smt022 .
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 :smt005 . Lástima :smt002 .

Re: Autodetector de fuente usada...

Publicado: 12 Feb 2010, 05:08
por gna08
Chefito escribió:aaahhhh gna08, con esto he demostrado que no soy un master, ya que no he podido resolverlo :smt005 . Lástima :smt002 .
y con esto se afirma mi teoria :smt029 jejeje. por eso te lo decia aprendiz :smt021 jiji bueno che
:smt044

Re: Autodetector de fuente usada...

Publicado: 12 Feb 2010, 09:28
por Chefito
Sí, tenías razón :smt002 , pero quien ha avanzado algo con el código?? :smt016 :smt016 :smt016 .

Saludos.

Re: Autodetector de fuente usada...

Publicado: 12 Feb 2010, 10:57
por gna08
Chefito escribió:Sí, tenías razón :smt002 , pero quien ha avanzado algo con el código?? :smt016 :smt016 :smt016 .

Saludos.
:smt022 :smt022 :smt019 :smt019

jajaja deja k me meta en el asunto :smt024 y vemos k sale :smt025 jajaj esta bien chefito.. ya avanzaste bastante. :smt038 eso es bueno... falta mejorarlo.. :smt023

P/D: sin ofender son mis charlas :smt002