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 02-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Question ¿Cómo cambiar el caption de otra aplicación?

Buenos dias,

Existe alguna manera de cambiar el caption de un Form de una aplicación externa, con su Handle, necesito cambiar el caption del Form, no la información de la aplicación que aparece en la barra de tareas.

Por su ayuda muchas gracias.
Responder Con Cita
  #2  
Antiguo 02-09-2013
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por mordaz Ver Mensaje
Buenos dias,

Existe alguna manera de cambiar el caption de un Form de una aplicación externa, con su Handle, necesito cambiar el caption del Form, no la información de la aplicación que aparece en la barra de tareas.

Por su ayuda muchas gracias.
podrias utilizar un editor de recursos para modificar el exe.
__________________
all your base are belong to us
Responder Con Cita
  #3  
Antiguo 02-09-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Si la aplicación a la que quieres cambiarle el caption también la has hecho tú, podrías añadirle en el código del FormCreate del formulario principal el siguiente código.

Código Delphi [-]
Form1.Caption:=paramstr(1);

y en la aplicación que la manda ejecutar pones esto:

Código Delphi [-]
WinExec(PChar('C:\OtraAplicacion.exe aire, SW_SHOWNORMAL);

Te lo estoy diciendo de cabeza pero creo que era algo así.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #4  
Antiguo 02-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Y si se trata de otra aplicación que también está ejecutándose en ese momento:
Código Delphi [-]
procedure SetWindowTitle(const AppTitle, NewTitle: string);
var
  H : THandle;
begin
  H := FindWindow(nil, PChar(AppTitle));
  if H <> 0 then
    SetWindowText(H, PChar(NewTitle));
end;

Ejemplo de uso:
Código Delphi [-]
...
  SetWindowTitle('Calculadora', 'Nuevo título'); // (Calculadora de windows)
...
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 02-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Cita:
Empezado por look Ver Mensaje
podrias utilizar un editor de recursos para modificar el exe.
Ya intente con un editor de recursos, pero al parecer la aplicación esta comprimida. Si tienes experiencia y me puedes ayudar conoces de alguna aplicación con el que puedas descomprimir un exe? (aclarando que no es que este comprimida con winzip, winrar, etc.)

Te agradezco por responder, saludos..
Responder Con Cita
  #6  
Antiguo 02-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Cita:
Empezado por ElDioni Ver Mensaje
Si la aplicación a la que quieres cambiarle el caption también la has hecho tú, podrías añadirle en el código del FormCreate del formulario principal el siguiente código.

Código Delphi [-]
Form1.Caption:=paramstr(1);

y en la aplicación que la manda ejecutar pones esto:

Código Delphi [-]
WinExec(PChar('C:\OtraAplicacion.exe aire, SW_SHOWNORMAL);

Te lo estoy diciendo de cabeza pero creo que era algo así.

Saludos.
Desafortunadamente la aplicación no es mía, solo quiero cambiar el caption, pero tu solucion es muy buena, sería como enviarle el parámetro.

Te agradezco por responder.
Saludos
Responder Con Cita
  #7  
Antiguo 02-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Y si se trata de otra aplicación que también está ejecutándose en ese momento:
Código Delphi [-]
procedure SetWindowTitle(const AppTitle, NewTitle: string);
var
  H : THandle;
begin
  H := FindWindow(nil, PChar(AppTitle));
  if H <> 0 then
    SetWindowText(H, PChar(NewTitle));
end;

Ejemplo de uso:
Código Delphi [-]
...
  SetWindowTitle('Calculadora', 'Nuevo título'); // (Calculadora de windows)
...
Efectivamente este código funciona muy bien con la calculadora y bloc de notas de Windows, cambia tanto el Titulo de la ventana como el caption de la aplicación en la barra de tareas. Desafortunadamente para mi no ha sido así con mi aplicación, solo cambio el caption de la barra de tareas pero no logro cambiar el caption de la ventana.

Por tu respuesta muchas gracias, casi lo logro.

Existe alguna forma de acceder a los elementos como Labels o Caption de una ventana de una aplicación en ejecución y cambiarlos?
Responder Con Cita
  #8  
Antiguo 02-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Creo que ya encontré el problema, al tratar de hacer un SetWindowPos(), me he percatado que detrás aparece otra ventana, me imagino que es la ventana principal de esa aplicación, por eso no cambia el caption de la ventana, ahora el problema es como puedo tomar el Handle de la ventana que es visible y no de la ventana principal, lo intente con FindWindowEx() pero no estoy seguro de estar haciendo lo correcto puesto que no pude obtener su Handle.

Alguna sugerencia?
Responder Con Cita
  #9  
Antiguo 03-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mordaz.

El código del mensaje #4, cambiará sin ningún problema cualquier título de ventana de una aplicación tipo SDI. Siempre claro, que la aplicación se esté ejecutando y que la ventana que deseas cambiar el título tenga su propiedad visible en verdadero.

Pero podría suceder que la aplicación de tercero que mencionas sea MDI, en ese caso el código tiene que cambiar un poco:
Código Delphi [-]
...
implementation

{$WARNINGS OFF}

procedure SetWindowTitleMDI(const MainTitle, ChildTitle, NewTitle: string);
var
  hMain, hMDI, hChild : THandle;
begin
  hMain := FindWindow(nil, PChar(MainTitle));
  if hMain <> 0 then
  begin
    hMDI := FindWindowEx(hMain, 0, 'MDIClient', 0);
    if hMDI <> 0 then
    begin
      hChild  := FindWindowEx(hMDI, 0, 0, PChar(ChildTitle));
      if hChild <> 0 then
       SetWindowText(hChild, PChar(NewTitle));
    end;
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.btnChangeMDIClick(Sender: TObject);
begin
  SetWindowTitleMDI('MDIForm',      // titulo del MDIForm (main)
                    'MDIChild1',    // título del MDIChild (buscado)
                    'OTRO_TITULO'); // nuevo título
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 03-09-2013
mordaz mordaz is offline
Miembro
 
Registrado: mar 2008
Posts: 32
Poder: 0
mordaz Va por buen camino
Talking

Hola ecfisa,

Gracias por tu ayuda, siguiendo el código que amablemente me proporcionaste como ejemplo, no pude tomar el Handle de FindWindowEx(hMain, 0, 'MDIClient', 0) así que investigando un poco mas la aplicación en ejecución con WinSight32, encontré que efectivamente había 2 procesos que se desprendían del mismo .exe, también encontré que la class del proceso que no podía tomar su Handle era simplemente "TMainForm" asi que con tu ejemplo del 'MDIClient' busque esta vez 'TMainForm' y pude tomar el handle del proceso directamente con FindWindow.

Aquí esta el código de como lo resolví en C++ Builder.

Código Delphi [-]
HWND hMain,hAplication;

//Esta ventana no estaba visible pero ponia la aplicacion en la barra de tareas
//Tomando handle de la aplicacion
hAplication=FindWindow(0,"Etiqueta original de la aplicacion");
if (hAplication){
   SetWindowText(hAplication, "Nueva etiqueta");
}

//Esta ventana si estaba visible
//Tomando handle de la ventana principal 
hMain=FindWindow("TMainForm",0);
if (hMain){
   SetWindowText(hMain, "Nueva etiqueta - Caption de Ventana");
   SetWindowPos(hMain,HWND_TOPMOST,100,450,vgi_width-200,vgi_height-450,SWP_SHOWWINDOW);
}
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
Auto Borrar Aplicacion / Cambiar Privilegios Aplicacion / Ejecutar como Administrador jogagua Varios 15 27-10-2011 01:38:07
Cambiar Caption Caral Varios 13 08-02-2008 14:22:13
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Como puedo cambiar un Hilo de una seccion a otra??? RONPABLO Varios 2 17-11-2005 21:29:29
Evitar cambiar a otra aplicación Jan_polero API de Windows 1 24-01-2005 17:27:55


La franja horaria es GMT +2. Ahora son las 04:09:15.


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