Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Maximizar

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Maximizar Responder citando

hola a todos

He logrado que cuando ejecuto la aplicacion, mire si ya hay una instancia de esa misma aplicacion ya ejecutandose. Cuando la detecta, la tiene que sacar a primer plano la instancia abierta y, el problema lo tengo cuando esta minimizada, ya que una vez detectado el handle de la ventana, la restauro con la funcion ShowWindow. Lo hace todo correcto, pero... despues no puedo volver a minimizarla... ¿que puede estar pasando y que puedo hacer?

Gracias y un saludo

ji_mminm@hotmail.com

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

Prueba tu codigo en un proyecto nuevo.. no hay nada raro en lo que dices.

Escribe en el foro el codigo que estes usando, igual asi vemos el problema.

Salu2

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

El codigo que uso es este. Lo pongo en el evento FormShow()


CreateMutex(NULL, true, "project1.exe");
if (GetLastError() != 0)
{
pPrevWnd = GetWindow(GetDesktopWindow(), GW_CHILD);
while (pPrevWnd)
{
hd = GetProp(pPrevWnd, texto);
if(hd)
{
ShowWindow(pPrevWnd, SW_RESTORE);
SetForegroundWindow(pPrevWnd);
this->Close();
}
pPrevWnd = GetWindow(pPrevWnd, GW_HWNDNEXT);
}
}
SetProp(this->Handle, texto, (HANDLE)89);

Antes intetaba saber si la ventana estaba minimizada con IsIconic() pero no me detectaba la ventana en ese estado, asi qeu opte por llamar siempre a la funcion ShowWindow directamente. El problema que tengo es que despues de ejecutarse, si pulso el icono de minimizar no me hace caso.. no puedo... ¿porque es normal?, quiero que despues de restaurarla con ese codigo, poder volver a minimizara.

Gracias y un saludo

ji_mminm@hotmail.com

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

He encontrado por ahi un pedazo de codigo que recuerdo me funcionaba a la perfeccion:

code:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
::CreateMutex(NULL, NULL, "MyMutex");
if (GetLastError())
{
Application->Title = "Something Else";
HWND FirstWnd;
FirstWnd = ::FindWindow("TApplication", "Once Only App");
if (::IsIconic(FirstWnd))
{
::ShowWindow(FirstWnd, SW_SHOWDEFAULT);
}
::SetForegroundWindow(FirstWnd);
}
else
{
Application->Initialize();
Application->Title = "Once Only App";
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

Suerte!

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

Este codigo lo uso en mis programas y funciona a la perfeccción:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try{
::CreateMutex(NULL,NULL,"MUTEX");
if (GetLastError()){
Beep();
ShowMessage("El programa ya está en ejecución");
Application->Title = "Nombre temporal";
HWND FirstWnd;
FirstWnd = :: FindWindow("TApplication", "NombreAplicacion");
if (::IsIconic(FirstWnd)){
::ShowWindow(FirstWnd,SW_SHOWDEFAULT);
}
::SetForegroundWindow(FirstWnd);
}else{
Application->Initialize();
Application->Title = "NombreAplicacion";
Application->CreateForm(__classid(TFormPrincipal), &Form1);
exit(0);
}
Application->Run();
}
}catch (Exception &exception){
Application->ShowException(&exception);
}
return 0;
}

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

Este codigo lo uso en mis programas y funciona a la perfección:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try{
::CreateMutex(NULL,NULL,"MUTEX");
if (GetLastError()){
Beep();
ShowMessage("El programa está en ejecución");
Application->Title = "NombreTemporal";
HWND FirstWnd;
FirstWnd = :: FindWindow("TApplication", "NombrePrograma");
if (::IsIconic(FirstWnd)){
::ShowWindow(FirstWnd,SW_SHOWDEFAULT);
}
::SetForegroundWindow(FirstWnd);
}else{
Application->Initialize();
Application->Title = "NombrePrograma";
Application->CreateForm(__classid(TFormPrincipal), &Form1);
Application->Run();
}
}catch (Exception &exception){
Application->ShowException(&exception);
}
return 0;
}

Volver arriba
Mensaje    Asunto: Maximizar Responder citando

Muchas gracias a todos, en realidad lo unico que he hecho es cambiar el codigo de sitio y ponerlo en el WINMAIN del proyecto, ahi no me da ningun problema y despues de detectar la instancia, si esta minimizada la muestra y vuelve a poderse minimizar la ventana, cosa que no pasaba poniendo el codigo en el FormShow de la ventana principal.

Aun asi, el codigo que habeis mandado no me valdria del todo, porque buscais por titulo de ventana y yo no puedo hacer eso, porque no se que titulo tendra. El codigo de mas arriba muestra como lo hago para no buscar por titulo de la ventana.

Lo dicho, gracias a todos.

ji_mminm

Volver arriba
Mensaje    Asunto: Responder citando

Suponiendo que la aplicación se inicia minimizada al lado del reloj del sistema, el código aquí posteado no funciona hasta que la aplicación ha sido restaurada manualmente y vuelta a minimizar, entonces SI se ejecuta el código restuarando la aplicación automáticamente. ¿Alguien sabría corregir esto?
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.