Como verificar que el programa esta en ejecución
-
- Posts: 84
- Joined: Fri May 09, 2008 8:19 pm
Como verificar que el programa esta en ejecución
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.
Gracias, Feliz nuevo año 2015
Juan Fco.
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
Re: Como verificar que el programa esta en ejecución
Hola,
Prueba lo siguiente:
Espero te sirva la idea.
Saludos,
Prueba lo siguiente:
Code: Select all
cEjecutable:="SEGUROS.EXE"
IF IsExeRunning(cEjecutable)
MsgStop("La aplicación ya se está ejecutando","Atención!!!")
Return nil
ENDIF
Code: Select all
// 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
//
Saludos,
Last edited by jrestojeda on Mon Jan 05, 2015 3:39 pm, edited 1 time in total.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Re: Como verificar que el programa esta en ejecución
Juan Fco.
Integra el código siguiente al principio del PRG main
Saludos
Integra el código siguiente al principio del PRG main
Code: Select all
hWnd := FindWindow( 0, "Título de la ventana principal de tu aplicación")
IF hWnd != 0
ShowWindow( hWnd, 1 )
QUIT
ENDIF
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
-
- Posts: 128
- Joined: Tue Jul 15, 2008 7:12 pm
- Location: Argentina
Re: Como verificar que el programa esta en ejecución
SetMultiple( <lOnOff> ) –> nil
<lOnOff> Permits or not permits multiple instances
http://www.fivetechsoft.com/wiki/doku.p ... etmultiple
<lOnOff> Permits or not permits multiple instances
http://www.fivetechsoft.com/wiki/doku.p ... etmultiple
-
- Posts: 128
- Joined: Tue Jul 15, 2008 7:12 pm
- Location: Argentina
Re: Como verificar que el programa esta en ejecución
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
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: 84
- Joined: Fri May 09, 2008 8:19 pm
Re: Como verificar que el programa esta en ejecución
Gracias a ambos por su ayuda
-
- Posts: 128
- Joined: Tue Jul 15, 2008 7:12 pm
- Location: Argentina
Re: Como verificar que el programa esta en ejecución
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
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: 84
- Joined: Fri May 09, 2008 8:19 pm
Re: Como verificar que el programa esta en ejecución
Gracias, resuelto con sus ayuda
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Como verificar que el programa esta en ejecución
Saludosjrestojeda wrote:Hola,
Prueba lo siguiente:
Code: Select all
cEjecutable:="SEGUROS.EXE" IF IsExeRunning(cEjecutable) MsgStop("La aplicación ya se está ejecutando","Atención!!!") Return nil ENDIF
Espero te sirva la idea.Code: Select all
// 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 //
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
Re: Como verificar que el programa esta en ejecución
Ruben
Code: Select all
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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Como verificar que el programa esta en ejecución
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...
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
Re: Como verificar que el programa esta en ejecución
José Luis:
EL código que sugerí en este hilo hace lo que necesitas.
Saludos
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
- Biel EA6DD
- Posts: 680
- Joined: Tue Feb 14, 2006 9:48 am
- Location: Mallorca
- Contact:
Re: Como verificar que el programa esta en ejecución
Tomando como base la función de Cristobal, en lugar de cerrar la aplicación (oProcess:Terminate(0)) podrias darle el foco
Code: Select all
oWShell := CreateObject("WScript.Shell")
oWShell:AppActivate(oProcess:ProcessId)
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Como verificar que el programa esta en ejecución
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...Biel EA6DD wrote:Tomando como base la función de Cristobal, en lugar de cerrar la aplicación (oProcess:Terminate(0)) podrias darle el focoCode: Select all
oWShell := CreateObject("WScript.Shell") oWShell:AppActivate(oProcess:ProcessId)
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Como verificar que el programa esta en ejecución
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 IsExeRunningArmando wrote:José Luis:
EL código que sugerí en este hilo hace lo que necesitas.
Saludos
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!