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 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.271
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



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 20:02:54.


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