averiguar si una aplicacion ya esta iniciada

12/01/2005 - 04:12 por julito | Informe spam
quisiera saber como limitar el nº de instancias de una
aplicacion, es decir quiero q una vez iniciada una
aplicacion cuando se vuelva a pulsar en el icono para
ejecutarla de nuevo no deja hacerlo mientras este otra
instancia en marcha. no se si me he explicado bien, vamos
q solo quiero q se ejecute una vez al mismo tiempo.

saludos a todos y gracias

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
12/01/2005 - 22:40 | Informe spam
Morgan wrote:
Maestro, oye, abusando, entre tus curiosidades no tendras algo por el
estilo pero para el viejito pero aun muy popular VB :-)



Tenerlo hecho no lo tengo, pero la idea es la misma con la diferencia que el
mutex hay que crearlo con APIs. Si me da el tiempo intento hacer algo.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#2 Morgan
12/01/2005 - 23:35 | Informe spam
Todo el que necesites maestro, esa pregunta como se repite en el foro, y no
se me habia ocurrido que le cambiaran el nombre, cada dia se aprenden cosas
nuevas, te agradesco :-)

Saludos ... Miguel Angel Martínez Morgan ... 8-)
[MVP-VB]

Eduardo A. Morcillo [MS MVP VB] <emorcilloATmvps.org> wrote:
Morgan wrote:
Maestro, oye, abusando, entre tus curiosidades no tendras algo por el
estilo pero para el viejito pero aun muy popular VB :-)



Tenerlo hecho no lo tengo, pero la idea es la misma con la diferencia
que el mutex hay que crearlo con APIs. Si me da el tiempo intento
hacer algo.
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
13/01/2005 - 01:57 | Informe spam
Morgan, para VB6 seria algo asi:

CLASE PrevInstance:
-

Option Explicit

Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" ( _
ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long

Private Const ERROR_ALREADY_EXISTS As Long = 183

Private m_bOwned As Boolean
Private m_lMutex As Long
Private m_bInit As Boolean

Private Sub Inicializar()

' Creo el mutex
m_lMutex = CreateMutex(0&, True, App.Title & App.Major & App.Minor &
App.Revision)

' Compruebo si se pudo crear el mutex
' y lanzo un error si no se pudo
If m_lMutex = 0 Then Err.Raise &H80070000 Or Err.LastDllError

' Compruebo si el mutex ya estaba creado por
' otra instancia
m_bOwned = Err.LastDllError <> ERROR_ALREADY_EXISTS

m_bInit = True

End Sub

Public Property Get PrevInstance() As Boolean

' Inicializo la clase si no lo esta
If Not m_bInit Then Inicializar

PrevInstance = Not m_bOwned

End Property

Private Sub Class_Terminate()

' Libero el mutex
CloseHandle m_lMutex

End Sub

Y para usarlo:

Dim m_oPrevInst As New PrevInstance

Private Sub Form_Load()

If m_oPrevInst.PrevInstance Then
MsgBox "Ya hay otra instancia"
End
End If

End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#4 Pedro Luna Montalvo, MVP
13/01/2005 - 03:58 | Informe spam
Si mis 512MB de memoria no me fallan, las aplicaciones Visual Basic 6
internamente ya implementan un mutex para determinar si existen varias
instancias de una aplicacion iniciadas.

Esto se verifica (si no me equivoco), con la propiedad boolean
App.PrevInstance.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el
mensaje news:uxA1BNR%
Morgan, para VB6 seria algo asi:

CLASE PrevInstance:
-

Option Explicit

Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA"
( _
ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long

Private Const ERROR_ALREADY_EXISTS As Long = 183

Private m_bOwned As Boolean
Private m_lMutex As Long
Private m_bInit As Boolean

Private Sub Inicializar()

' Creo el mutex
m_lMutex = CreateMutex(0&, True, App.Title & App.Major & App.Minor &
App.Revision)

' Compruebo si se pudo crear el mutex
' y lanzo un error si no se pudo
If m_lMutex = 0 Then Err.Raise &H80070000 Or Err.LastDllError

' Compruebo si el mutex ya estaba creado por
' otra instancia
m_bOwned = Err.LastDllError <> ERROR_ALREADY_EXISTS

m_bInit = True

End Sub

Public Property Get PrevInstance() As Boolean

' Inicializo la clase si no lo esta
If Not m_bInit Then Inicializar

PrevInstance = Not m_bOwned

End Property

Private Sub Class_Terminate()

' Libero el mutex
CloseHandle m_lMutex

End Sub

Y para usarlo:

Dim m_oPrevInst As New PrevInstance

Private Sub Form_Load()

If m_oPrevInst.PrevInstance Then
MsgBox "Ya hay otra instancia"
End
End If

End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#5 Morgan
13/01/2005 - 04:37 | Informe spam
Nop, ya lo cheque, precisamente cuando Eduardo comento que pasaba si se
copiaba con otro nombre y corren ambas instancias ...

Saludos ... Miguel Angel Martínez Morgan ... 8-)
[MS-MVP-VB]

Pedro Luna Montalvo, MVP wrote:
Si mis 512MB de memoria no me fallan, las aplicaciones Visual Basic 6
internamente ya implementan un mutex para determinar si existen varias
instancias de una aplicacion iniciadas.

Esto se verifica (si no me equivoco), con la propiedad boolean
App.PrevInstance.



"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el
mensaje news:uxA1BNR%
Morgan, para VB6 seria algo asi:

CLASE PrevInstance:
-

Option Explicit

Private Declare Function CreateMutex Lib "kernel32" Alias
"CreateMutexA" ( _
ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long

Private Const ERROR_ALREADY_EXISTS As Long = 183

Private m_bOwned As Boolean
Private m_lMutex As Long
Private m_bInit As Boolean

Private Sub Inicializar()

' Creo el mutex
m_lMutex = CreateMutex(0&, True, App.Title & App.Major &
App.Minor & App.Revision)

' Compruebo si se pudo crear el mutex
' y lanzo un error si no se pudo
If m_lMutex = 0 Then Err.Raise &H80070000 Or Err.LastDllError

' Compruebo si el mutex ya estaba creado por
' otra instancia
m_bOwned = Err.LastDllError <> ERROR_ALREADY_EXISTS

m_bInit = True

End Sub

Public Property Get PrevInstance() As Boolean

' Inicializo la clase si no lo esta
If Not m_bInit Then Inicializar

PrevInstance = Not m_bOwned

End Property

Private Sub Class_Terminate()

' Libero el mutex
CloseHandle m_lMutex

End Sub

Y para usarlo:

Dim m_oPrevInst As New PrevInstance

Private Sub Form_Load()

If m_oPrevInst.PrevInstance Then
MsgBox "Ya hay otra instancia"
End
End If

End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida