Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
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 27-06-2016
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Hallar la ventana de un proceso en ejecución

Hola a todos.

Estoy interesado en trabajar con una ventana de un proceso en ejecución, del cual conozco el nombre del ejecutable "Programa.exe", su ubicación "C:\AAA\BBB\Programa.exe" y la ID del proceso, obtenida con:

Código Delphi [-]
Function ProcessId(ExeName:String):Cardinal;
Var
    APro: TProcessEntry32;
    Handle: THandle;
    Ok: Boolean;
    Count: Integer;
Begin
Result:=0;
Handle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
APro.dwSize := SizeOf(APro);
Ok := Process32First(Handle, APro);
While Ok Do
    Begin
    If ExtractFileName(APro.szExeFile)=ExeName Then
        Begin
        Result:=APro.th32ProcessID;
        Break;
        End;
CloseHandle(Handle);
End;

Ahora ya tengo el Id del proceso, pero no sé como localizar la ventana principal de dicho proceso. Tened en cuenta que esta ventana puede no estar visible o minimizada y precisamente lo que yo necesito es hacerla visible, ponerla en Left=0 / Top=0 y dimensionar su Width y Height.

Trabajo con Delphi 10, Windows Vista y el proceso es de un tercero. Lo que yo pretendo es interactuar con él:

Código Delphi [-]
Function MouseClick(X: DWORD; Y: DWORD): DWORD;
Var
    P: TPoint;
    VInput: TINPUT; // array [0..1] of TINPUT;
Begin
GetCursorPos(P); // Guardo las coordenadas del mouse
SetCursorPos(X, Y); // Posiciono el mouse
// Mando la pulsación del mouse (Down)
ZeroMemory(@VInput, SizeOf(VInput));
VInput.Tipo := INPUT_MOUSE;
VInput.mi.dx := X;
VInput.mi.dy := Y;
VInput.mi.dwFlags := MOUSEEVENTF_LEFTDOWN;
Result := Windows.SendInput(1, tagINPUT(VInput), SizeOf(TINPUT));
// Mando la pulsación del mouse (UP)
VInput.Tipo := INPUT_MOUSE;
VInput.mi.dx := X;
VInput.mi.dy := Y;
VInput.mi.dwFlags := MOUSEEVENTF_LEFTUP;
Result := Windows.SendInput(1, tagINPUT(VInput), SizeOf(TINPUT));
SetCursorPos(P.X, P.Y); // Restauro las coordenadas del Mouse
End;

Esto me funciona perfectamente, pero para ello debo poner la pantalla del proceso en una posición y tamaño conocidas y visible.

Si podéis ayudarme me daréis un empujón de agradecer.
Responder Con Cita
  #2  
Antiguo 27-06-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo probaría a explorar la ventanas y a partir de ahí intentar averiguar cuales pertenecen al proceso que tú quieres.
Lo que no se es cómo vas a acceder a la "ventana principal" sin tener más información.

Para el tema de las ventanas te recomiendo este hilo o también puedes realizar una búsqueda por la función EnumWindowsProc.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 27-06-2016
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Gracias Neftali,

Estoy probando con EnumWindows, cuando tenga algo que funcione lo pongo.
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
Mensaje/Ventana de espera mientras se ejecuta un proceso Adrian Murua PHP 1 07-03-2012 17:51:23
Controlar la ejecución de un proceso satelier.martin Varios 3 14-04-2011 01:35:33
Parar ejecucion de un proceso trohan Varios 3 01-02-2008 17:05:18
Obtener proceso de una ventana. Thor API de Windows 2 02-05-2006 18:46:55
Como muestro una ventana de proceso carlosmoralesm OOP 2 04-06-2004 05:07:48


La franja horaria es GMT +2. Ahora son las 02:24:13.


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