 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ji_mminm Invitado
|
Publicado: Mie 21 Mar, 2001 1:27 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
Fede Invitado
|
Publicado: Mie 21 Mar, 2001 2:09 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
j_mminm Invitado
|
Publicado: Mie 21 Mar, 2001 2:28 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
Fede Invitado
|
Publicado: Mie 21 Mar, 2001 5:10 pm Asunto: Maximizar |
|
|
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 |
|
 |
J.B Invitado
|
Publicado: Mie 21 Mar, 2001 5:58 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
J.B Invitado
|
Publicado: Mie 21 Mar, 2001 6:05 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
ji_mminm Invitado
|
Publicado: Mie 21 Mar, 2001 8:00 pm Asunto: Maximizar |
|
|
| 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 |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 04 Jul, 2006 11:27 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|