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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cerrar esta ventana...

En algún lado... la verdad no me acuerdo donde vi esto:

Código Delphi [-]
  Windows.SetParent(FindWindow(nil, 'Mi PC'), Self.Handle);

Y así meto la ventana de Mi PC dentro de mi formulario, algo un poco curioso para mi, pero mi duda es... como cerrar la ventana de Mi PC cuando se encuentra dentro de mi formulario? Esto lo pregunto porque cuando cierro mi aplicación y no he cerrado la ventana de Mi PC me da un error en el Explorer.exe

Desde ya muchas gracias amigos.
__________________
Herr Heins Faust
Responder Con Cita
  #2  
Antiguo 11-03-2009
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
Hola,

No se por que lo encuentra tan curioso aquel código, ya que lo que hace es sólo asignarle un padre a la ventana de Mi PC que está actualmente abierta mediante el handle de ella, que en este caso el padre será la ventana del formulario. Además sólo servirá para una ventana que tenga como caption "Mi PC". Si otro programa tiene el mismo texto incluirá esa ventana, por eso usted debe asignarle aparte del texto de la ventana, el nombre de la clase de la ventana, pero aún así, sólo servirá para el lenguaje en español de Windows y no para otros idiomas del SO. También, sólo funcionará para la ventana del explorador de archivos que tenga ese texto y que esté actualmente abierta. Usted si desea incluir ventanas del explorador de archivos, debería crearla mediante las APIS de Windows y nombre de la clase de estas ventanas en tiempo de ejecución.

Pero bueno... aquí le propongo el siguiente ejemplo que le he hecho a la rápida en relación a lo que está arriba en su código, puede contener errores de ejecución, ya que es sólo un ejemplo, usted optimícelo y lea más en la ayuda acerca de estas funciones:

Código Delphi [-]
var
  WHandle: THandle;
  PnlContenedor: TPanel;

procedure IncluirWndHandle;
begin
  WHandle := FindWindow('CabinetWClass', 'Mi PC');
  if WHandle <> 0 then
  begin
    PnlContenedor := TPanel.Create(Form1);
    PnlContenedor.Parent := Form1;
    PnlContenedor.Align := alClient;
    Windows.SetParent(WHandle, PnlContenedor.Handle);
  end;
end;

procedure CerrarHandleWnd;
begin
  SendMessage(WHandle, WM_DESTROY, 0, 0);
  DestroyWindow(PnlContenedor.Handle);
end;

procedure TForm1.BtnCerrarHandleWndClick(Sender: TObject);
begin
  CerrarHandleWnd;
end;

procedure TForm1.BtnIncluirHandleWndClick(Sender: TObject);
begin
  IncluirWndHandle;
  BtnCerrarHandleWnd.BringToFront;
  BtnIncluirHandleWnd.BringToFront;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CerrarHandleWnd;
end;


Cordiales saludos y espero que el ejemplo le sea de utilidad =)

Última edición por Black_Ocean fecha: 11-03-2009 a las 02:01:57.
Responder Con Cita
  #3  
Antiguo 11-03-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por Black_Ocean Ver Mensaje
Hola,

No se por que lo encuentra tan curioso aquel código, ya que lo que hace es sólo asignarle un padre a la ventana de Mi PC que está actualmente abierta mediante el handle de ella, que en este caso el padre será la ventana del formulario. Además sólo servirá para una ventana que tenga como caption "Mi PC". Si otro programa tiene el mismo texto incluirá esa ventana, por eso usted debe asignarle aparte del texto de la ventana, el nombre de la clase de la ventana, pero aún así, sólo servirá para el lenguaje en español de Windows y no para otros idiomas del SO. También, sólo funcionará para la ventana del explorador de archivos que tenga ese texto y que esté actualmente abierta. Usted si desea incluir ventanas del explorador de archivos, debería crearla mediante las APIS de Windows y nombre de la clase de estas ventanas en tiempo de ejecución.

Pero bueno... aquí le propongo el siguiente ejemplo que le he hecho a la rápida en relación a lo que está arriba en su código, puede contener errores de ejecución, ya que es sólo un ejemplo, usted optimícelo y lea más en la ayuda acerca de estas funciones:

Código Delphi [-]var WHandle: THandle; PnlContenedor: TPanel; procedure IncluirWndHandle; begin WHandle := FindWindow('CabinetWClass', 'Mi PC'); if WHandle <> 0 then begin PnlContenedor := TPanel.Create(Form1); PnlContenedor.Parent := Form1; PnlContenedor.Align := alClient; Windows.SetParent(WHandle, PnlContenedor.Handle); end; end; procedure CerrarHandleWnd; begin SendMessage(WHandle, WM_DESTROY, 0, 0); DestroyWindow(PnlContenedor.Handle); end; procedure TForm1.BtnCerrarHandleWndClick(Sender: TObject); begin CerrarHandleWnd; end; procedure TForm1.BtnIncluirHandleWndClick(Sender: TObject); begin IncluirWndHandle; BtnCerrarHandleWnd.BringToFront; BtnIncluirHandleWnd.BringToFront; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin CerrarHandleWnd; end;



Cordiales saludos y espero que el ejemplo le sea de utilidad =)
Me parece curioso porque aún no le veo ninguna utilidad... de hecho en algún truco de trucomanía muestra como minimizar algunos controles dentro de un formulario, cosa que también le veo poca utilidad. Lo que me da curiosidad es como matar esa ventana, una vez dentro de mi form, el handle a esta ventana pareciera inválido, pero le echaré un ojo a tu código y veré si aprendo algo de ahí. Gracias.

Ah y un favor... no me escribas de usted, es que me siento viejo , mejor escríbeme de tu (quisiera seguir sintiéndome joven )

Saludos y gracias de nuevo.
__________________
Herr Heins Faust
Responder Con Cita
  #4  
Antiguo 11-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Habiendo guardado el Handle de Mi PC antes de cambiar el parent, para cerrarla después:
Código Delphi [-]
SendMessage(hMIPC, WM_SYSCOMMAND, SC_CLOSE, 0);

Sin conocer el Handle previo tambien se puede hacer así:
Código Delphi [-]
SendMessage(FindWindowEx(Self.Handle, nil, nil, 'Mi PC'), WM_SYSCOMMAND, SC_CLOSE, 0);


Saludos.

Última edición por escafandra fecha: 11-03-2009 a las 12:00:49.
Responder Con Cita
  #5  
Antiguo 11-03-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Habiendo guardado el Handle de Mi PC antes de cambiar el parent, para cerrarla después:
Código Delphi [-]SendMessage(hMIPC, WM_SYSCOMMAND, SC_CLOSE, 0);


Sin conocer el Handle previo tambien se puede hacer así:
Código Delphi [-]SendMessage(FindWindowEx(Self.Handle, nil, nil, 'Mi PC'), WM_SYSCOMMAND, SC_CLOSE, 0);



Saludos.
Ya había probado así y no me funcionó, vuelvo a probar, quizás hice algo mal...
__________________
Herr Heins Faust
Responder Con Cita
  #6  
Antiguo 11-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Corrijo un pequeño error:
Código Delphi [-]
SendMessage(FindWindowEx(Self.Handle, 0, nil, 'Mi PC'), WM_SYSCOMMAND, SC_CLOSE, 0);
Funciona seguro.

Saludos.
Responder Con Cita
  #7  
Antiguo 12-03-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Corrijo un pequeño error:
Código Delphi [-]
SendMessage(FindWindowEx(Self.Handle, 0, nil, 'Mi PC'), WM_SYSCOMMAND, SC_CLOSE, 0);

Funciona seguro.

Saludos.
Eso ya lo veremos...
__________________
Herr Heins Faust
Responder Con Cita
  #8  
Antiguo 12-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Faust Ver Mensaje
Eso ya lo veremos...
Dímelo tu.

Saludos.
Responder Con Cita
  #9  
Antiguo 13-03-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Dímelo tu.

Saludos.
No... pus si...

Si funcionó, es que no estaba usando adecuadamente SendMessage

Gracias por quitarme esta duda que me causaba curiosidad.
__________________
Herr Heins Faust
Responder Con Cita
Respuesta



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
Cerrar ventana rex HTML, Javascript y otros 2 29-05-2006 12:16:42
Problemas MDI cerrar ventana rafadrover Varios 3 28-01-2006 13:30:44
Confirmación de cerrar ventana. gontxalo OOP 13 26-05-2005 10:33:34
Cerrar ventana con la tecla ESC Alexander Varios 3 19-05-2005 19:14:22
Cerrar Ventana ronson OOP 2 17-12-2004 12:38:04


La franja horaria es GMT +2. Ahora son las 02:55:29.


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