Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
Me han comentado que una opción es liberar a la aplicación de mi depurador y luego enviarle el texto, cosa que me valdría porque es lo único que tiene que hacer, pero eso tiene un pero ¿Como hago para saber cuándo enviar el texto? ¿Un timer? No se me ocurre como. Cuando desatacheo un depurador ¿Iría al mismo evento que cuando terminó el proceso o son eventos diferentes?
Las opciones que me indicas me sobrepasan de largo ��.
Con un Timer puedes ver si la ventana se está ejecutando, pero tienes un problema de eficiencia. Si el periodo es muy largo te pierdes momentos y si es muy corto, estás ejecutando la búsqueda siempre. El Hook solo se ejecuta cuando se ejecuta la API DialogBoxParamA pero en mas laborioso.

Saludos.
Responder Con Cita
  #2  
Antiguo 06-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Pero no entiendo algo. Supongamos que creo un Hook a esa función ¿Como sabría cuando terminó de mostrar la ventana para enviar el texto?
Responder Con Cita
  #3  
Antiguo 06-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Un ejemplo de Hook que vi fue esto:
Código PHP:
LRESULT CALLBACK MyCbtHook(int nCode,  WPARAM wParam,  LPARAM lParam)
{
    switch(
nCode)
    {
    case 
HCBT_CREATEWND:
        {
            
HWND hWnd = (HWND)wParam;
            
TRACE("A window is being created, HWND = %p\n"hWnd);
            break;
        }
    }

    return 
CallNextHookEx0nCodewParamlParam );
}

void InstallHook()
{
    
SetWindowsHookEx(WH_CBTMyCbtHook0GetCurrentThreadId());

¿Sería algo así? O tendría que crear una dll e inyectarla para hacer eso que dices?
Responder Con Cita
  #4  
Antiguo 06-05-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Dado que se trata de una aplicación externa, la técnica es un hook a la API mediante inyección de código en una dll (puede ser inyección directa pero es más complejo). Este tipo de hook intercepta la API, es decir, tu código es la misma API con lo que lo sabes todo. Tienes un tutorial aquí.

Saludos.
Responder Con Cita
  #5  
Antiguo 06-05-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Dado que se trata de una aplicación externa, la técnica es un hook a la API mediante inyección de código en una dll (puede ser inyección directa pero es más complejo). Este tipo de hook intercepta la API, es decir, tu código es la misma API con lo que lo sabes todo. Tienes un tutorial aquí. Ahora me doy cuenta de que ese enlace ya lo conocías desde junio de 2014

Saludos.
Responder Con Cita
  #6  
Antiguo 06-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Unhappy

Vale gracias, de momento estoy intentando desatachearme del proceso y tengo un problema, cuando lo hago me da Error 5 que es "Acceso denegado". El inicio de la funcion donde creo el proceso que voy a depurar es así:
Código PHP:
        DEBUG_EVENT DebugEv;
        
HANDLE CurrentExceptionThread;
        
DWORD dwContinueStatus;

        
TDll *ItemDLL;

        
bool salir=false;

        
ListaBPs = new TList;
        
ListaDlls = new TList;
        
ListaThreads = new TList;

        
Synchronize(OnInitLoopDebugThread); //Usaremos este evento para inizialización de variables en la clase usuario si se requiere.

        
si.cb sizeof(STARTUPINFO);
        
GetStartupInfo(&si);
        
// El proceso se tiene que crear en la misma función donde está el hilo del depurador sino no vale
        
CreateProcess(PathFile.c_str(),NULLNULLNULLFALSEDEBUG_PROCESS DEBUG_ONLY_THIS_PROCESSNULLNULL, &si, &pi); 
Y en otra funcion hago esto:
Código PHP:
if(DebugActiveProcessStop(pi.dwProcessId) == 0){
        
ShowMessage(GetLastError());
    } 
El mensaje es para ver que error me estaba dando y me muestra que es el 5 y segun la lista de errores es que me está denegando el acceso. ¿que hago mal para que no me deje desatachearme?
Responder Con Cita
  #7  
Antiguo 06-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Vale, ya lo solucioné. El problema es que me quería desatachear desde uno de los eventos del debugger que era un breakpoint y asi no me funcionaba así que cree un timer el cual activo en ese evento del breakpoint y desde el timer llamo a la función que desatachea y así si funciona. Al final me di cuenta que haciendo eso no necesito ni desatachearme ya que desde el timer mando el texto sin problemas.
O sea que el problema era hacer el envío del mensaje desde el evento del depurador porque supongo que haciendo así rompía algo .
Responder Con Cita
  #8  
Antiguo 06-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Una duda que tengo es que al desatachear el depurador se quedaba 2 o 3 segundos congelado y puse un bp en el loop del depurador para ver qué podía ser y seguía pasando y paraba en el loop a los 2 o 3 segundos. O sea es como que le lleva un tiempo hacer esa operación. ¿Puede ser?

Última edición por aguml fecha: 06-05-2020 a las 18:32:10.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Enviar datos a PHP y leer resultados (pagina ajena) dosher81 Delphi para la web 7 04-06-2018 07:16:00
problema texto de varios edit a otro edit rafaelon Varios 2 29-07-2017 22:49:02
comparar un texto de un listbox con un texto de un edit juaarias Varios 1 04-10-2011 01:13:10
Delphi 7.0 y MySql, Enviar informacion de ventana a ventana gozi Conexión con bases de datos 2 03-04-2006 05:28:41
Enviar texto a la ventana abierta Mr.Vaka Varios 4 28-11-2005 18:57:31


La franja horaria es GMT +2. Ahora son las 06:48:26.


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