FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como verificar que el programa esta en ejecución
Posts: 102
Joined: Fri May 09, 2008 08:19 PM
Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 03:17 PM

Hola amigos como verifico que el programa está en ejecución, para que el usuario no lo cargue varias veces en memoria.

Gracias, Feliz nuevo año 2015
Juan Fco.

Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 03:36 PM
Hola,
Prueba lo siguiente:

Code (fw): Select all Collapse
cEjecutable:="SEGUROS.EXE"
IF IsExeRunning(cEjecutable)
   MsgStop("La aplicación ya se está ejecutando","Atención!!!")
   Return nil
ENDIF



Code (fw): Select all Collapse
// VERIFICO SI UN PROGRAMA ESTÁ CORRIENDO //
Function IsExeRunning(cExeVerifica)
Local cTexto,lRespuesta

WAITRUN( "CMD.EXE /C TASKLIST > TASKLIST.TXT" , .f. )

cTexto:=MEMOREAD( "TASKLIST.TXT" )

IF AT(cExeVerifica,cTexto) > 0
   lRespuesta:=.t.
ELSE
   lRespuesta:=.f.
ENDIF

FERASE("TASKLIST.TXT")

Return lRespuesta
//


Espero te sirva la idea.
Saludos,
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 03:37 PM
Juan Fco.

Integra el código siguiente al principio del PRG main

Code (fw): Select all Collapse
   hWnd := FindWindow( 0, "Título de la ventana principal de tu aplicación")

   IF hWnd != 0
      ShowWindow( hWnd, 1 )
      QUIT
   ENDIF


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 04:15 PM

SetMultiple( <lOnOff> ) –> nil
<lOnOff> Permits or not permits multiple instances

http://www.fivetechsoft.com/wiki/doku.p ... etmultiple

Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 04:16 PM

SET MULTIPLE [ ON | OFF ]
In 32 bits the same can be achieved by using the following code

// Check whether the application is already running in the same PC
if IsExeRunning( cFileName( HB_ARGV( 0 ) ) )
MsgWait( "Another instance of this application is already running in this PC", "Multiple Instance not allowed" )
Return NIL
endif

http://www.fivetechsoft.com/wiki/doku.p ... s_multiple

Posts: 102
Joined: Fri May 09, 2008 08:19 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 04:18 PM

Gracias a ambos por su ayuda

Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 04:19 PM

IF IsExeRunning( cFileNoPath( HB_ArgV( 0 ) ) ) // Sirve para verificar si ya se ejecuto el Exe...
MsgBox( "El programa " + APP_TITLE + " ya esta siendo ejecutado!" )

hWnd := FindWindow( APP_TITLE )
IF hWnd > 0
IF IsIconic( hWnd )
Restore( hWnd )
ELSE
SetForeGroundWindow( hWnd )
ENDIF
ELSE
* MsgStop( "No es possible encontrar el programa !", "Error", , .f. )
ENDIF
ELSE
//EJECUTA EL EXE
ENDIF

/////*****

pragma BEGINDUMP

define HB_OS_WIN_USED

define _WIN32_WINNT 0x0400

include <windows.h>

include "hbapi.h"

include "hbapiitm.h"

HB_FUNC( ISICONIC )
{
hb_retl( IsIconic( ( HWND ) hb_parnl( 1 ) ) );
}

HB_FUNC ( FINDWINDOW )
{
hb_retnl( ( LONG ) FindWindow( 0, hb_parc( 1 ) ) );
}

HB_FUNC( ISEXERUNNING ) // ( cExeNameCaseSensitive ) --> lResult
{
HANDLE hMutex = CreateMutex( NULL, TRUE, ( LPTSTR ) hb_parc(1) );

hb_retl( GetLastError() == ERROR_ALREADY_EXISTS );

ReleaseMutex( hMutex );
}

pragma ENDDUMP

Posts: 102
Joined: Fri May 09, 2008 08:19 PM
Re: Como verificar que el programa esta en ejecución
Posted: Mon Jan 05, 2015 04:21 PM

Gracias, resuelto con sus ayuda

Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Como verificar que el programa esta en ejecución
Posted: Sat Jan 17, 2015 09:16 PM
jrestojeda wrote:Hola,
Prueba lo siguiente:

Code (fw): Select all Collapse
cEjecutable:="SEGUROS.EXE"
IF IsExeRunning(cEjecutable)
   MsgStop("La aplicación ya se está ejecutando","Atención!!!")
   Return nil
ENDIF



Code (fw): Select all Collapse
// VERIFICO SI UN PROGRAMA ESTÁ CORRIENDO //
Function IsExeRunning(cExeVerifica)
Local cTexto,lRespuesta

WAITRUN( "CMD.EXE /C TASKLIST > TASKLIST.TXT" , .f. )

cTexto:=MEMOREAD( "TASKLIST.TXT" )

IF AT(cExeVerifica,cTexto) > 0
   lRespuesta:=.t.
ELSE
   lRespuesta:=.f.
ENDIF

FERASE("TASKLIST.TXT")

Return lRespuesta
//


Espero te sirva la idea.
Saludos,


Saludos

Siempre sale el mensaje La aplicación ya se está ejecutando","Atención!!!
si lo corre por primera vez no deberia de salir, solamente debe salir cuanbo lo ejecuta mas de una vez
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Como verificar que el programa esta en ejecución
Posted: Sat Jan 17, 2015 09:49 PM
Ruben

Code (fw): Select all Collapse
Function IsExeRunning( tcName, lTerminate )
Local oLocator
Local oWMI
Local oProcesses
Local oProcess
Local lIsRunning

DEFAULT lTerminate := .F.

oLocator   := CREATEOBJECT("WBEMScripting.SWBEMLocator")
oWMI       := oLocator:ConnectServer()
oWMI:Security_:ImpersonationLevel := 3

oProcesses = oWMI:ExecQuery([SELECT * FROM Win32_Process WHERE Name = '] + tcName + ['])
lIsRunning = .F.
IF oProcesses:Count > 0
    FOR EACH oProcess in oProcesses
        lIsRunning := .T.
        IF lTerminate
            oProcess:Terminate(0)
        ENDIF
    Next
ENDIF
Return lIsRunning
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Como verificar que el programa esta en ejecución
Posted: Fri Aug 18, 2017 02:53 AM

Saludos, se que este tema ya es viejo...pero ahora que estoy usando IsExeRunning, pregunto...HAY MANERA DE HACER QUE ADEMAS DE DECIRME QUE MI APLICACION YA ESTA EN USO....ESTA TOME EL FOCUS DE LAS APLICACIONES ABIERTAS O SI ESTA MINIMIZADA SE MAXIMIZE ASI COMO SE HACE CON LAS VENTANAS MDI.? si es asi, como y si no, ni modo, lo que quiero es que si el usuario ejecuta mas de una vez la aplicacion, esta se le ponga al frente asi como cuando se tienen varias ventanas medi y se trata de abrir una ya abierta o algo que resalte y le diga al cliente que alli esta ademas de decirle que ya esta en ejecucion...saludos, gracias... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Como verificar que el programa esta en ejecución
Posted: Fri Aug 18, 2017 03:47 AM

José Luis:

EL código que sugerí en este hilo hace lo que necesitas.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Como verificar que el programa esta en ejecución
Posted: Fri Aug 18, 2017 07:35 AM
Tomando como base la función de Cristobal, en lugar de cerrar la aplicación (oProcess:Terminate(0)) podrias darle el foco
Code (fw): Select all Collapse
      oWShell := CreateObject("WScript.Shell")
      oWShell:AppActivate(oProcess:ProcessId)
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Como verificar que el programa esta en ejecución
Posted: Fri Aug 18, 2017 03:17 PM
Biel EA6DD wrote:Tomando como base la función de Cristobal, en lugar de cerrar la aplicación (oProcess:Terminate(0)) podrias darle el foco
Code (fw): Select all Collapse
      oWShell := CreateObject("WScript.Shell")
      oWShell:AppActivate(oProcess:ProcessId)


Biel, es lo que deseo en si, que le de el foco y si es posible la ponga al frente o maximize si estubiese minimizada, probare lo de armando y lo q sugieres, saludos...gracias... :-)
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Como verificar que el programa esta en ejecución
Posted: Fri Aug 18, 2017 04:40 PM
Armando wrote:José Luis:

EL código que sugerí en este hilo hace lo que necesitas.

Saludos


Armando, he probado tu codigo y me funciona a media, te explico, si la aplicacion esta MINIMIZADA, funciona porque la maximiza y la trae al frente, pero si no esta minimizada, solo no vuelve abrirla, pero no la trae al frente de las demas abiertas, la probe en ambas formas con 5 aplicacion abiertas y todas maximizadas, asi que por los momentos me quedare con IsExeRunning
Dios no está muerto...



Gracias a mi Dios ante todo!

Continue the discussion