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

 
 
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
 



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 14:37: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