Página 1 de 1

Alternativa a Mutex

Publicado: 19 Abr 2009, 16:14
por osiris1001
bueno el mutex nos perimite definir que se ejecute una sola vez el mismo archivo aunque este tenga nombre diferentes....

En un modulo:
'---------------------------------------------------------------------------------------
' Modulo : mAltMutex
' Autor : Karcrack
' Fecha-Hora: 01/02/2009 12:27
' Finalidad : Comprobar si hay otra instacia de nuestra APP ejecutandose
' Referencia: [Enlace externo eliminado para invitados] ... ;topicseen
' Agradec. : steve10120 por codearlo en Delphi, yo solo lo traduci. Y agrege un API xD
'---------------------------------------------------------------------------------------

Option Explicit
Private Declare Function GlobalAddAtom Lib "kernel32.dll" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
Private Declare Function GlobalFindAtom Lib "kernel32.dll" Alias "GlobalFindAtomA" (ByVal lpString As String) As Integer
Public Declare Function GlobalDeleteAtom Lib "kernel32.dll" (ByVal nAtom As Integer) As Integer

Public Function CheckIfRunning(ByVal sStr As String, Optional ByRef lID As Long) As Boolean
If GlobalFindAtom(sStr) Then
CheckIfRunning = True 'Estamos siendo ejecutados
Else
lID = GlobalAddAtom(sStr) 'No estamos siendo ejecutados
'Devolvemos el ID, para que despues pueda ser eliminado el Atom
End If
End Function
Ejemplo de uso:
'En un Formulario
Option Explicit

Public lID As Long

Private Sub Form_Load()
If CheckIfRunning("Karcrack_Provando", lID) = True Then
MsgBox "Ya hay otra instacia abierta...", , "ADIOS"
End
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Eliminamos el Atom antes de cerrarnos
Call GlobalDeleteAtom(lID)
End Sub