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 01-03-2007
pache pache is offline
Miembro
 
Registrado: jun 2003
Ubicación: colombia
Posts: 64
Poder: 21
pache Va por buen camino
Cuantas veces está abierta una aplicación

Buen día para todos

Podría alguien decirme si conoce una función que me permita saber cuántas veces esta abierta una aplicación. Esto para limitar la cantidad de veces que se pueda abrir, por ejemplo si ya está abierta 3 veces, que no se pueda abrir nuevamente. Yo se como verificar si está abierta con el FindWindow, pero lo que quiero es saber cuantas veces está abierta sin tener que almacenar esto en una tabla.

De antemano, muchas gracias
__________________
Fernando González Gil

Última edición por pache fecha: 01-03-2007 a las 18:43:28.
Responder Con Cita
  #2  
Antiguo 01-03-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola,

ya que no quieres guardar esa info en una tabla, puedes guardarla en un fichero de texto o en el registro de windows, etc.
Revisa éste hilo.

Saludos
Responder Con Cita
  #3  
Antiguo 01-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Si lo que quieres saber es cuantas instancias de nuestro programa están corriendo a la vez, prueba con esta función:
Código Delphi [-]
uses PsApi;

function CuantosSomos: Integer;
var
  Procesos: array[1..1024] of DWORD;
  Needed, i: DWORD;
  Process: THandle;
  ModName: array[0..MAX_PATH] of Char;
begin
  Result:= 0;
  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
  begin
    for i:= 1 to (Needed div Sizeof(DWORD)) do
    begin
      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        FALSE,Procesos[i]);
      if Process <> 0 then
      begin
        if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1)>0  then
        begin
          if StrIComp(ModName,PChar(ParamStr(0))) = 0 then
            inc(Result);
        end;
        CloseHandle(Process);
      end;
    end;
  end;
end;

// Por ejemplo
ShowMessage(IntToStr(CuantosSomos));
Responder Con Cita
  #4  
Antiguo 02-03-2007
pache pache is offline
Miembro
 
Registrado: jun 2003
Ubicación: colombia
Posts: 64
Poder: 21
pache Va por buen camino
Muchísimas gracias Seoane, eso era justo lo que estaba buscando. Funciona perfectamente.

Está buena para la sección de trucos del Club. Hasta pronto.
__________________
Fernando González Gil
Responder Con Cita
  #5  
Antiguo 02-03-2007
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
¿Y qué pasa si hago una copia del programa y le cambio de nombre?

// Saludos
Responder Con Cita
  #6  
Antiguo 02-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
¿Y qué pasa si hago una copia del programa y le cambio de nombre?
Pues que no seria el mismo programa, si no una copia del mismo.

Ahora en serio, no tiene sentido andar moviendo los programas de sitio y esperar que funcionen bien. Así que pasaría lo que tiene que pasar, no funcionaria.

Ahora bien, que queremos hacer la súper aplicación a prueba de balas. Pues se hace, que a mi a matar moscas a cañonazos no me gana nadie
Código Delphi [-]
uses PsApi, Hashes;

function FSize(Path: String): Int64;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(Path,faAnyFile,SearchRec) = 0 then
    Result:= SearchRec.Size
  else
    Result:= -1;
  FindClose(SearchRec);
end;

function CuantosSomos: Integer;
var
  Procesos: array[1..1024] of DWORD;
  Needed, i: DWORD;
  Process: THandle;
  ModName: array[0..MAX_PATH] of Char;
  Size: int64;
  Hash: String;
begin
  Result:= 0;
  Size:= FSize(ParamStr(0));
  Hash:= CheckSum(ParamStr(0));
  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
  begin
    for i:= 1 to (Needed div Sizeof(DWORD)) do
    begin
      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        FALSE,Procesos[i]);
      if Process <> 0 then
      begin
        if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1)>0  then
        begin
          if Size = FSize(String(ModName)) then
            if CheckSum(String(ModName)) = Hash then
              inc(Result);
        end;
        CloseHandle(Process);
      end;
    end;
  end;
end;

La unit hashes se encuentra aquí
http://www.clubdelphi.com/foros/show...22&postcount=4

Última edición por seoane fecha: 04-03-2007 a las 02:33:28.
Responder Con Cita
  #7  
Antiguo 02-03-2007
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 seoanae
Ahora en serio, no tiene sentido andar moviendo los programas de sitio y esperar que funcionen bien. Así que pasaría lo que tiene que pasar, no funcionaria.
Tiene sentido en tanto se pregunta como evitarlo. De otra forma, sólo dígase al usuario que no se puede abrir más de tres veces.

Cita:
Empezado por seoane
a mi a matar moscas a cañonazos no me gana nadie
Pues, hombre, ¿qué decirte? Si te tomas esto como una competencia, pues te declaro vencedor absoluto. No me interesa.

// Saludos
Responder Con Cita
  #8  
Antiguo 02-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Tiene sentido en tanto se pregunta como evitarlo. De otra forma, sólo dígase al usuario que no se puede abrir más de tres veces.
No es lo mismo, uno puede equivocarse y pulsar varias veces en el icono sin darse cuenta, o abrir una aplicación sin fijarse en que ya estaba abierta y minimizada, por ejemplo. Pero hacer una copia y cambiarle el nombre, me parece un acto consciente ...

Cita:
Pues, hombre, ¿qué decirte? Si te tomas esto como una competencia, pues te declaro vencedor absoluto. No me interesa.
¿Competencia? ¿que competencia?, ahora si que me perdí.
Responder Con Cita
  #9  
Antiguo 02-03-2007
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 seoane
No es lo mismo, uno puede equivocarse y pulsar varias veces en el icono sin darse cuenta, o abrir una aplicación sin fijarse en que ya estaba abierta y minimizada, por ejemplo. Pero hacer una copia y cambiarle el nombre, me parece un acto consciente ...
Claro que no es lo mismo. Pero si tu aplicación depende funcionalmente de no poder abrir más de tres instancias, entonces debes asegurarte bien. Y si no depende de eso, entonces, dejen al usuario que abra tantas instancias como quiera.

// 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
evitar ejecutar la misma aplicacion 2 veces noe API de Windows 13 26-05-2008 19:30:03
Cantidad de veces que se ejecuta una aplicación efelix OOP 3 09-11-2006 17:23:55
¿Cuantas veces se ejecuta mi aplicación? m@r Varios 6 07-11-2006 15:28:33
Saber cuantas veces se repite un dato en una tabla Tangela SQL 2 18-08-2005 06:31:13
ejecutar aplicacion 2 veces en misma maquina maruenda Varios 1 07-02-2004 19:19:24


La franja horaria es GMT +2. Ahora son las 06:45:04.


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