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; Begin
GetCursorPos(P); SetCursorPos(X, Y); 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));
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); 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.