Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Abrir aplicacion 1 vez

que tal gente, no encontre esto por ningun lado :S queria saber como puedo hacer para limitar al usuario a que ejecute una sola vez a la vez (valga la redundancia) mi aplicacion, que por ejemplo si quieren ejecutar mi programa, y este ya esta abierto, que se ponga en foco el programa abierto, no que se abra uno nuevo.. muchas gracias..
Responder Con Cita
  #2  
Antiguo 23-05-2011
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Estimado kdemia :

Puedes utilizar el truco 582 que lo encuentras en la página de inicio del Club Delphi, en la sección Trucos o bien el componente TmxOneInstance de MaxComponents, que lo encuentras en la FTP del Club.

Saludos y ojalá haya podido ayudarte
Responder Con Cita
  #3  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
genial radenf.. me sirvio muchisimo.. gracias.
Responder Con Cita
  #4  
Antiguo 23-05-2011
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Encantado de haberte podido ayudar.

Saludos
Responder Con Cita
  #5  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
no puedo instalar el TmxOneInstance en delphi 2010 :S
Responder Con Cita
  #6  
Antiguo 23-05-2011
Avatar de Spynosa
Spynosa Spynosa is online now
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
poniendo esta unit en el uses ya lo tienes

Código Delphi [-]
unit UIApp;

interface

implementation

uses
  Windows, SysUtils, Forms;

const
  { Cadenas para registrar el mutex y el mensaje }
  sMutex   = '0C861247-3FA9-4C82-9E0E-15696E0857BC';
  sActivar = '83F47A0F-7B00-49FB-9F67-A9E1D4AD2B93';

var
  mActivar    : Cardinal; { Mensaje para activar la instancia anterior }
  Mutex       : Cardinal; { Mutex                                      }
  PrevWndProc : TFarProc; { Procedimiento de ventana original          }


function AppWndProc(Handle: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
var
  FgThreadId  : DWORD; { Hilo de la app. que tenga el foco }
  AppThreadId : DWORD; { Hilo de nuestra aplicación        }

begin
  if Msg = mActivar then
  begin
    { Si está minimizada basta restaurarla }
    if IsIconic(Handle) then
      ShowWindow(Handle, SW_RESTORE)
    else
    begin
      { Obtener los hilos }
      FgThreadId  := GetWindowThreadProcessId(GetForegroundWindow, nil);
      AppThreadId := GetWindowThreadProcessId(Handle, nil);

      { Anexar el hilo de nuestra app. al de la  que tenga el foco }
      AttachThreadInput(AppThreadId, FgThreadId, true);

      { Ahora sí, activar la applicación }
      SetForegroundWindow(Handle);

      { Separar el hilo de nuestra app de la otra }
      AttachThreadInput(AppThreadId, FgThreadId, false);
    end;

    Result := 0;
  end
  else
    { Dejar que el procedimiento original se encargue de los otros mensajes }
    Result := CallWindowProc(PrevWndProc, Handle, Msg, wParam, lParam);
end;

procedure Activar;
begin
  { Mandamos el mensaje a todas las ventanas }
  SendMessage(HWND_BROADCAST, mActivar, 0, 0);
end;

procedure Registrar;
begin
  mActivar := RegisterWindowMessage(sActivar);
  Mutex    := CreateMutex(nil, true, sMutex);

  { Si ya existe el mutex lanzamos una excepción silenciosa }
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
   Mutex := 0;
   abort;
  end
  else
  begin
    { Sustituimos el procedimiento de ventana }
    PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
    SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
  end;
end;

initialization
  try
    Registrar;
  except
    Activar;
    Halt;
  end;

finalization
  if Mutex <> 0 then ReleaseMutex(Mutex);
end.


siento no acordarme de donde la saque, mia no es

un saludo
Responder Con Cita
  #7  
Antiguo 23-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Spynosa Ver Mensaje
siento no acordarme de donde la saque, mia no es
Pues es de la Web de Román, el problema es que a día de hoy está "caída" o el dominio ha caducado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 23-05-2011
Avatar de Spynosa
Spynosa Spynosa is online now
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
gracias Neftali, ya no me acordaba, pero funciona perfectamente
Responder Con Cita
  #9  
Antiguo 23-05-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Pues es de la Web de Román, el problema es que a día de hoy está "caída" o el dominio ha caducado.
¿No les avisé de la restauración?

http://roman.clubdelphi.com/

Aunque bueno, casi es lo mismo que estar caída pues hace años que no pongo nada je, je.

// Saludos
Responder Con Cita
  #10  
Antiguo 23-05-2011
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Si no te querés complicar la vida, dentro del paquete de componentes libres JEDI hay uno que hace exactamente lo que pides, con algunas interesantes propiedades para personalizarlo.

Muy recomendado.

http://jvcl.delphi-jedi.org
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #11  
Antiguo 23-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
¿No les avisé de la restauración?
nop.

¿La dirección sigue siendo la misma que hay aquí?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 23-05-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
nop.

¿La dirección sigue siendo la misma que hay aquí?
Ja, ja. Supongo que no Habrá que cambiar eso, me he estado perdiendo cientos de mails de mis fans

// Saludos
Responder Con Cita
  #13  
Antiguo 23-05-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Ja, ja. Supongo que no...
Me lo imaginaba...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 23-05-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por rretamar Ver Mensaje
Si no te querés complicar la vida, dentro del paquete de componentes libres JEDI hay uno que hace exactamente lo que pides, con algunas interesantes propiedades para personalizarlo.

Muy recomendado.

http://jvcl.delphi-jedi.org

y que componente es, o de que paleta es la que se utiliza para esto... mira que la tengo instalada y aún no se para que sirve cada uno de ellos....
__________________
BlueSteel
Responder Con Cita
  #15  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
nunca me imagine tantos mails de parte de club delphi en una pregunta mia :P jajaja muchas gracias por la unidad la voy a probar esta noche y les comento.. tmb voy a probar los componentes JEDI.. y por cierto, roman te felicito por esa pagina no la conocia terriblemente util.. un abrazo a todos
Responder Con Cita
  #16  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
roman tu unidad la baje de tu pagina y funciona perfectamente el tema es que genera procesos nuevos osea como que se abre pero no se muestra.. si yo lo abro 10 veces, en los procesos del administrador de tareas aparece 10 veces, pero en el escritorio me lo muestra 1 vez es raro :P, y es como q cuando lo abro por segunda o mas veces como que tarda.. pero bueno a eso no le doy mucha bola, me interesa mas lo de los procesos.. se puede solucionar?
Responder Con Cita
  #17  
Antiguo 23-05-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues entonces no funciona "perfectamente". Desde luego, no debe hacer eso. Esa unidad la hice para delphi 7 y windows xp y me parece que en nuevas versiones tiene algunas fallas, pero no las he revisado pues hace mucho que ya casi no programo en delphi.

¿Qué versiones usas?

// Saludos
Responder Con Cita
  #18  
Antiguo 23-05-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
delphi 2010 y windows 7 .. :/
Responder Con Cita
  #19  
Antiguo 26-05-2011
Avatar de Spynosa
Spynosa Spynosa is online now
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
con delphi 7 y windows 7 funciona perfectamente debe ser cosa de delphi 2010
Responder Con Cita
  #20  
Antiguo 26-05-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo probé con Delphi XE y Windows Vista y tampoco tuve problemas. Claro, en la lista de procesos, el nuevo proceso aparece listado temporalmente, pues sí existe, y desaparece apenas termina. Se me hace extraño el comportamiento que menciona kdemia, pues la técnica usada (semáforos) no creo que haya cambiado en Windows 7.

// Saludos
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
Abrir fichero desde mi aplicacion Omar Alejandro Varios 1 28-10-2010 23:22:40
Abrir aplicacion minimizada Cecilio Varios 4 06-04-2009 13:25:37
interbase lento al abrir una aplicacion roberto hurtado Firebird e Interbase 7 02-05-2008 19:52:17
Abrir una aplicacion con un TButton Drake C++ Builder 18 10-01-2006 16:28:43
Opendialog abrir aplicacion!!! liz_hilton OOP 2 10-05-2005 17:41:32


La franja horaria es GMT +2. Ahora son las 12:26:22.


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