Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
Question callback para drawtext textout

Pues eso es, a ver si alguien sabe como implementar un callback para drawtext o textout, quiero atrapar los textos de windows antes de que sean escritos y cambiarlos, tanto del fondo como de las ventanas, como de los menus, control sobre todo lo que windows escribe antes de que lo escriba, tanto si tienen controles estandar como si no, yo no encuentro otra manera que estas funciones que deben ser de gdi32.dll creo. No le pido a nadie que se curre 300 lineas de programa(si lo hace pues ). El problema es que he buscado y me parece que lo que quiero es tan específico que no encuentro nada, igual no empleo las palabras correctas. Otras funciones tienen en uno de sus parametros el puntero al procedimiento que se va a ejecutar, lo cambias y listo. Pero pej.:
WINAPI DrawTextW_I(
HDC hDC,
const WCHAR* lpString,
int nCount,
RECT* lpRect,
unsigned int uFormat
);
Pues no veo el puntero a la funcion callback. Ni tampoco por donde cogerlo, a ver si alguien...se tira al chicle y se saca unas lineas de código facilitas de leer que hagan este tingladete.
Ah!, en Delphi obviamente. Gracias de antemano por el interés.
Responder Con Cita
  #2  
Antiguo 26-07-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Tienes razón, no hay callback.

DrawText tiene como parámetro el hdc, que es el handle de la superficie donde se va a pintar( el TCanvas de delphi); en el parámetro lpRect está la porción de espacio donde se pintará.

No sé si aclaro algo, creo que no .
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 26-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
No, pero gracias. No hay función callback. Pero hay forma de monitorizar todos los textos que windows escribe. Lo que necesito es atrapar todos los textos de esas ventanas antes de ser escritos. En algun sitio se guardan las coordenadas y los textos --- textout (contexto, coorx,coory,puntero al string, num caracteres) --- digo yo. Windows enviará esta información a textout o drawtext y la presentará en pantalla, yo quiero pillarlo antes de que llegue a textout, coordenadas y texto, hacer lo que yo quiera con ello y después que siga su camino a textout y lo presente en pantalla.
Responder Con Cita
  #4  
Antiguo 26-07-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Échale una mirada a la función SetWindowsHookEx con las opciones wh_CallWndProc o wh_CallWndProcRet. A ver si te funciona con una rutina de retrollamada CallWndProc o CallWndRetProc, respectivamente.

Última edición por Al González fecha: 26-07-2008 a las 16:24:30.
Responder Con Cita
  #5  
Antiguo 26-07-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes ¿que es lo que quieres conseguir?

Porque, aun interceptando todas las llamadas a la API DrawTextW, no podrás evitar que una aplicación utilice otra función diferente para mostrar texto, ya sea otra API, DirectX, etc ... o incluso una función propia que sea capaz de dibujar texto sin necesidad de ninguna librería externa.

Yo creo que lo mejor es que te centres en un objetivo mas pequeño, por eso te preguntaba al principio ¿realmente que quieres hacer?

De todos modos, si sigues queriendo interceptar todas las llamadas a una función de la API windows no te lo pondrá fácil, tendrás que recurrir a la inyección de código en todos los procesos que se ejecuten en el equipo. Busca información sobre "API hooking" y veras que no es algo sencillo, incluso puede que esas 300 lineas de las que hablabas al principio se queden cortas
Responder Con Cita
  #6  
Antiguo 26-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
sip, perdona, omití un detalle importante, tengo un hook global wh_cbt, en principio, puedo pillar todas las ventanas al crearse o activarse. Las que menos me interesan envian un mensaje EM_STREAMIN que si podría supongo capturar con wndproc(hwnd,msg,wparam,lparam), msg es de suponer que tendría el valor EM_STREAMIN. Las que me interesan de verdad(pero de la buena) son las que emplean drawtext y textout, y es ahi donde no veo ni por donde agarrarlo, supongo que cuando va a usar estas funciones se envie un
WM_PAINT a la ventana que se pueda pillar con wndproc, pero ni idea de por donde empezar. SIP temo que es lo que quiero, obtener las coordenadas y la cadena antes de que sea usada por drawtext o textout, de esa forma podré tanto modificar el texto como su posición en pantalla o alguna otra cosa.
Responder Con Cita
  #7  
Antiguo 26-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
Drawtext y textout, el resto de las api, directx, ... no me interesan de momento, con eso voy servido para una temporada.
Responder Con Cita
  #8  
Antiguo 27-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
ando por aqui, http://msdn.microsoft.com/en-us/libr...18(VS.85).aspx, con la ayuda de delphi y el sdk win32 que complementa la ayuda y buscando por internet pero na de na, no veo el por donde.

Al González; wndprocret no creo que me sirva parece que lo devuelve cuando ya ha sido procesado. Con wndproc podria pillar un wm_paint, pero ahi me quedo, ¿como se si es por un drawtext y lo que escribe?
Responder Con Cita
  #9  
Antiguo 27-07-2008
callbacking callbacking is offline
Registrado
 
Registrado: jul 2008
Posts: 9
Poder: 0
callbacking Va por buen camino
Mas claro lo tengo, todos los procesos que me interesa monitorizar usan gdi32.dll y la funcion TextOutW, sigo agradeciendo la atención, las ideas y los links de ayuda, veo que es jodido. También j..de desistir.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DrawText en TCustomPanel epalacios OOP 2 29-05-2008 09:24:12
canvas y TEXTOUT underwater Gráficos 2 31-03-2008 21:44:55
Implementacion de Callback walito Varios 6 26-09-2006 20:03:22
WaveInOpen y Callback walito API de Windows 6 08-07-2006 00:06:58
Marshall y CallBack´s Edgar Perez Providers 0 03-05-2006 16:39:55


La franja horaria es GMT +2. Ahora son las 04:07:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi