Ver Mensaje Individual
  #10  
Antiguo 13-05-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para encontrar la ventana de un proceso debes enumerar todas las ventanas top-level hasta encontrar una del proceso requerido. Luego debes navegar hasta encontrar la ventana principal.

Código Delphi [-]
function GetWindowFromPId(PId: DWORD; var WText, WClass: String): THandle;
type
  TWinParam = record
    Handle: THandle;
    PId: DWORD;
  end;
  PWinParam = ^TWinParam;
var
  WinParam: TWinParam;
  Buffer: array [1..255] of char;
 
  function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
  var
    PId: DWORD;
  begin
    Result:= true;
    PId:= 0;
    GetWindowThreadProcessId(Handle, PId);
    if PWinParam(lParam).PId = PId then
    begin
      PWinParam(lParam).Handle:= Handle;
      Result:= false;
    end;
  end;
 
begin
  WinParam.PId:= PId;
  EnumWindows(@EnumWindowsProc, LPARAM(@WinParam));
  repeat
    Result:= WinParam.Handle;
    WinParam.Handle:= Windows.GetParent(Result);
  until WinParam.Handle = 0;
  GetWindowText(Result, @Buffer, 255);
  WText:= Buffer;
  GetClassName(Result, @Buffer, 255);
  WClass:= Buffer;
end;

Forma de uso:
Código Delphi [-]
var
  Caption: String;
  Clase: String;
  HWin: THandle;
begin
  HWin:= GetWindowFromPId(PID, Caption, Clase);
end;

Más información aquí


Saludos.
Responder Con Cita