Ver Mensaje Individual
  #4  
Antiguo 19-02-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Reputación: 17
DriverOp Va por buen camino
Creo que lo tengo.

En el fondo, lo que tú quieres saber es el z-order de las ventanas actualmente mostradas. El z-order es el orden en el que están "apiladas" las ventanas en la pantalla. Siendo la que está "arriba de todo" la ventana con el z-order cero y así en orden creciente hasta la última.

La API de Windows tiene dos funciones para saber el z-order de las ventanas, por el momento pude determinar el z-order de todas las ventanas abiertas (la de la aplicación actual y las del resto de las aplicaciones) usando estas dos funciones:

GetTopWindow() devuelve el handle de la ventana con z-order cero si le pasas cero como parámetro:

Código Delphi [-]
var
  h: hwnd;
begin
  h:=GetTopWindow(0);
...

Luego:
GetNextWindow() devuelve la siguiente ventana según su z-order del handle que le pasas como parámetro, el segundo parmámetro sirve para indicarle la dirección en la que quieres recorrer el z-order:

Código Delphi [-]
var
  h: hwnd;
begin
  h:=GetTopWindow(0);
  while h <> 0 do
    begin
       h := GetNextWindow(h,GW_HWNDNEXT);
    end;

Lo que hago aquí es obtener el handle de la ventana "arriba de todo" y luego entro al ciclo en el que recorro todas las ventanas hasta abajo de la pila de ventanas. La última ventana no tiene una ventana siguiente y la función GetNextWindow devuelve cero, con lo que finaliza el ciclo.

Código Delphi [-]
var
  h: hwnd;
  z: integer;
begin
  Memo1.Lines.Clear;
  h:=GetTopWindow(0);
  z:=0;
  while h <> 0 do
    begin
      if h = Form1.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form1.');
      if h = Form2.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form2.');
      if h = Form3.Handle then
        Memo1.Lines.Add(IntToStr(z)+' Es el form3.');
      h := GetNextWindow(h,GW_HWNDNEXT);
      inc(z);
    end;
end;

Este sería el código con el que podrías comenzar a experimentar. La variable z te dirá el z-order de las ventanas.
Responder Con Cita