Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
Lo he solucionado así:
Código PHP:
bool THiloDebugger::AtachProcessByNameWindow(char *wName,int &Error)
{
    
HWND HParent;
    
DWORD ProcessId;
    
DWORD ThreadId;
    
int retval=false;

    
HParent=FindWindow(NULL,wName);
    if(
HParent){
        
ThreadId=GetWindowThreadProcessId(HParent,&ProcessId);
        if(
ThreadId){
            if(
DebugActiveProcess(ProcessId)){

                    
pi.dwThreadId=ThreadId;
                    
pi.hProcess OpenProcessPROCESS_QUERY_INFORMATION PROCESS_VM_READ PROCESS_TERMINATEFALSEProcessId);
                    
pi.hThread OpenThreadTHREAD_QUERY_INFORMATION THREAD_TERMINATEFALSEThreadId);
                    
pi.dwProcessId=ProcessId;
                    
retval=true;
                    
Error=0;

            }else{
                
Error=-1;
            }
        }else{
            
Error=-2;
        }
    }else{
        
Error=-3;
    }
    return 
retval;

Con esto ya obtengo el Handle del proceso atacheado y el del thread y aparentemente funciona todo ok. ¿está bien la solución?
Responder Con Cita
  #2  
Antiguo 07-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
Amigos ahora estoy con una variante pero que en vez del nombre de la ventana trabaje con el pid del proceso y tengo esto:
Código PHP:
bool THiloDebugger::AtachProcessById(int id,int &Error)
{
    
DWORD ThreadId;
    
int retval=false;

    
//ThreadId=GetWindowThreadId(HParent,&ProcessId);
    
if(ThreadId)
    {
        if(
DebugActiveProcess(id)){
            
pi.dwThreadId=ThreadId;
            
pi.hProcess OpenProcessPROCESS_QUERY_INFORMATION PROCESS_VM_READ PROCESS_TERMINATEFALSEid);
            
pi.hThread OpenThreadTHREAD_QUERY_INFORMATION THREAD_TERMINATEFALSEThreadId);
            
pi.dwProcessId=id;
            
retval=true;
            
Error=0;
        }else{
            
Error=-1;
        }
    }else{
        
Error=-2;
    }
    return 
retval;

El problema es que para hacerlo así necesito el hwnd de la ventana y no puedo usar FindWindow porque se supone que no tengo el titulo de la ventana y que lo hago con el pid. ¿como podria solucionarlo?
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
Cómo averiguar el PID de un proceso Ðαяισš Varios 20 01-01-2009 01:35:33
Abortar un proceso TONIAM Varios 10 31-05-2007 19:26:41
Terminar proceso torito Varios 15 20-04-2007 02:44:36
Matar proceso raugadel API de Windows 9 05-10-2006 19:23:49
Matar Proceso anitra_cattivo API de Windows 2 10-09-2003 19:10:55


La franja horaria es GMT +2. Ahora son las 16:22:00.


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