Crear Exe k permita abrir 2 veces un programa

Iniciado por ignorantev1.1, 5 Septiembre 2006, 01:19 AM

0 Miembros y 1 Visitante están viendo este tema.

byebye

CitarThe CreateMutex function creates a named or unnamed mutex object.

HANDLE CreateMutex(

    LPSECURITY_ATTRIBUTES lpMutexAttributes,   // pointer to security attributes
    BOOL bInitialOwner,   // flag for initial ownership
    LPCTSTR lpName    // pointer to mutex-object name 
   );

CitarReturn Values

If the function succeeds, the return value is a handle to the mutex object. If the named mutex object existed before the function call, the GetLastError function returns ERROR_ALREADY_EXISTS. Otherwise, GetLastError returns zero.

CitarThe system closes the handle automatically when the process terminates

ignorantev1.1

Gracias por tu colaboracion... si alguien me podria traducir lo anterior se lo agradeceria...pero de cualquier forma GRACIAS!!!

byebye

en cristiano quiere decir algo asi:

si no hay ningun problema la funcion devuelve el manejador del objeto mutex. si ya existe devuelve ERROR_ALREADY_EXISTS.

el sistema cierra automaticamente el handle al terminar el proceso.

se inicia el programa:
if createmutex==ERROR_ALREADY_EXISTS
cerrar aplicacion
else
seguir la ejecucion

se entiende la forma de usarlo mas o menos.

ignorantev1.1

Eso no es VB verdad?...no conozco el lenguaje o komo usar las propiedades k me diste(si esk esta en otro lenguaje)...ahora suponiendo que la copia del programa se llame:
hola.exe
y el programa se llame:
hey.exe...

explicamelo asi haber si asi si le entiendo...GRACIAS!!!

NO SOY TAN BRUTO LO QUE PASA ES QUE SOY LENTO QUE ES DIFERENTE...

byebye

no es ningun lenguaje en concreto, es para que te de una idea y cfreo que se entiende perfectamente.

ignorantev1.1

Esperame creo k te estoy entendiendo´pero tu no mi...
tu pones que si hay error cierre la aplicacion:
el error es logico que suceda es precisamente para eso la aplicacion que quiero crear. para evitar errores...
Eso es lo que dices?...
por lo general los programas o parches que tiene esta funcion son similares a el original pero son un poco mas grandes...
GRACIAS!!!

[VolkS]

#16
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 = 183&
 
Public Const AppVer = "MyApp v1.1"
Dim mutexvalue As Long
   
mutexvalue = CreateMutex(ByVal 0&, 1, AppVer)
 
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
CloseHandle mutexvalue
end
End If

Este code no es mio.
en la constante AppVer Pone el caption de la ventana que uses.
le agrege el "end"
(no lo testie, por lo que vi, parece funcionar)

ignorantev1.1

Por alguna razon no sirvio VOLks... el primer error que me marco que las constantes no se pueden definir "publics" y depues la puse "private".. depues que no me marco error a la hora de el calis lo compile y lo ejecutaba y simplemente no sucedia nada. podrias decir por que?
GRACIAS!!!