Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2008
Paulao Paulao is offline
Miembro
 
Registrado: Sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 15
Paulao Va por buen camino
Abrir el programa solo una vez

Hizo este codigo, pero no estas funcionando. Siempre viene el mensaje que ya tiene una aplicación rodando. Como hago para no permitir que la aplicación rode mas de una vez? Este codigo abajo, yo puzo en el .DPR.

Cita:
Var HprevHist : HWND;

begin
Application.Initialize;

HprevHist := FindWindow(Nil, PChar('DM_Principal'));
if HprevHist = 0 then
begin
Application.CreateForm(TDM_Principal, DM_Principal);
Application.CreateForm(TDM_PDV, DM_PDV);
Application.CreateForm(TFRM_Menu, FRM_Menu);
Application.CreateForm(TFrmAvisoEcf, FrmAvisoEcf);
Application.Run;
end else
MessageDlg('Você não pode executar outra cópia do aplicativo', mtInformation, [mbOK], 0);

end.
Responder Con Cita
  #2  
Antiguo 04-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Echa un vistazo a la unidad UIApp.pas del compañero Román.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 04-04-2008
Paulao Paulao is offline
Miembro
 
Registrado: Sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 15
Paulao Va por buen camino
Yo hizo un Download de unidad, pero no vino nada. La unidad estava dañada. Hizo 2 vezes, y fue la misma cosa, entoces deje de intertarlo.
Responder Con Cita
  #4  
Antiguo 04-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Pues lo lamento mucho. En mi caso puedo acceder perfectamente a la unidad, por otro lado, tan estupenda, que no me importa copiar aquí su código fuente:

Código Delphi [-]
unit UIApp;

interface

implementation

uses
  Windows, SysUtils, Forms;

const
  { Cadenas para registrar el mutex y el mensaje }
  sMutex   = '10D73234-C9F7-4C2D-BC7E-39B5820AF456';
  sActivar = '3F154732-CCDE-4BC7-9439-AFCD3BCFA84D';

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.

Basta con añadirla al proyecto, directamente, en el archivo "DPR", por ejemplo, para que la aplicación en cuestión no se ejecute dos veces. Para más información, véase la página de Román enlazada arriba.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #5  
Antiguo 09-04-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: Nov 2007
Posts: 60
Poder: 11
Garry Va por buen camino
¡Hola, compañeros!

No sé cuando intentaste la descarga, DEC, pero a mí también me falla . En seguida le mando un mensajillo...

Gracias por copiar el código... y a Román por compartirlo, claro: me resultará muy útil, seguro.
Responder Con Cita
  #6  
Antiguo 09-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Pues no sé Garry, a mí personalmente aún me va bien...
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #7  
Antiguo 09-04-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: Nov 2007
Posts: 60
Poder: 11
Garry Va por buen camino
Unhappy Pos no sé

Pues no sé si será cosa del Vista (¡otro casque más, cagüentó !)

El caso es que tras pulsar en el icono de descarga, me baja un archivo correctamente nombrado (*.pas), pero el contenido es un binario indescifrable. Ya le he notificado a Román este hilo...

El caso es que con tu copia ya resuelvo, pero, si el resto también me resulta útil, no sabría cómo hacer...
Responder Con Cita
  #8  
Antiguo 10-04-2008
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: Nov 2007
Posts: 60
Poder: 11
Garry Va por buen camino
¡Vaites (=osti, tú)!

No sé si sería algún problema con la conexión , o si Román averiguó y solucionó el problema, pero hoy me descarga perfectamente

Ss.
Responder Con Cita
  #9  
Antiguo 10-04-2008
Delfino Delfino is offline
Miembro
 
Registrado: Jul 2003
Ubicación: Madrid
Posts: 974
Poder: 15
Delfino Va por buen camino
Tambien existe el componente TjvAppInstances de la JVCL.. q permite tb activar o desactivar la caracteristica durante la ejecucion..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Aplicacio abrir solo una vez Paulao Varios 1 03-04-2008 17:55:30
Abrir documento word y hacerlo de solo lectura Leviatan Servers 1 28-12-2007 18:16:54
Abrir como solo lectura ixMike Varios 3 10-08-2006 20:02:17
Abrir solo hasta n-registros copett Tablas planas 1 27-05-2006 22:18:24
Abrir Word como Solo Lectura aig Servers 0 29-06-2004 14:04:33


La franja horaria es GMT +2. Ahora son las 08:53:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi