Ver Mensaje Individual
  #4  
Antiguo 23-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Prueba usar EnumWindows. Esta función de la API de Windows, lista todas las ventanas del escritorio, y por cada una llama a la función que tú le indiques pasando su identificador como parámetro.

Un ejemplo:

Código Delphi [-]
{
  Procesa la ventana indicada por Handle

  La función agrega el nombre de la clase de la ventana al objeto TStrings que
  se le pasa como parámetro.

  La función debe regresar true para indicar a EnumWindows que continúe
  listando ventanas.
}
function ProcessWindow(Handle: HWND; Log: TStrings): BOOL; stdcall;
var
  ClassName: array[0..255] of Char;

begin
  GetClassName(Handle, ClassName, 255);
  Log.Add(ClassName);

  Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.BeginUpdate;

  EnumWindows(@ProcessWindow, LParam(Memo1.Lines));

  Memo1.Lines.EndUpdate;
end;

El ejemplo coloca en un Memo, los nombres de las clase de las ventanas. Una vez que detectes la clase que te interesa, puedes agregar un condicional a la función que procesa cada ventana (ProcessWindow en el ejemplo):

Código Delphi [-]
if UpperCase(ClassName) = 'NOTEPAD' then
begin
  {
    Hacer lo que quieras con la ventana indicada por Handle
  }
end;

// Saludos
Responder Con Cita