Power Builder - apertura de iconos mas de 1 vez

   
Vista:

apertura de iconos mas de 1 vez

Publicado por Carolina (74 intervenciones) el 28/11/2014 17:55:01
Hola, quisiera ver si alguien me puede ayudar con esto: como hago para que no ejecuten mas de 1 vez el icono de mi programa en una misma pc, no se me ocurre como hacerlo.Si alguno me puede dar una manito!!! gracias!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

apertura de iconos mas de 1 vez

Publicado por Jorge (41 intervenciones) el 28/11/2014 21:30:04
En tu bd agrega una tabla de sesiones, en el que guardes cada ingreso al sistema (id, nombre de equipo, fecha de ingreso, fecha de cierre, estado de la sesión). Al momento de abrir tu aplicación y conectarte a la BD debes validar que el equipo no tenga una sesión activa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

apertura de iconos mas de 1 vez

Publicado por Carolina (74 intervenciones) el 29/11/2014 19:31:29
Jorge, muchas gracias nuevamente!!!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apertura de iconos mas de 1 vez

Publicado por Carolina (74 intervenciones) el 01/12/2014 20:48:09
Hola Jorge, una preguntita mas, como obtengo el nombre del equipo? Muchas gracias!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apertura de iconos mas de 1 vez

Publicado por Jorge (41 intervenciones) el 02/12/2014 20:21:37
Hola, una forma de obtener es leyendo el registro. Puedes implementar la siguiente función (tu decide donde lo implementas)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function string lee_nombre_pc ();
 
String	ls_Nombre
Integer	li_Return
 
li_Return = RegistryGet('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName',&
                     'ComputerName', RegString!, ls_Nombre)
 
If li_Return = 1 Then
	Return Trim(ls_Nombre)
End If
 
Return ''
end function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apertura de iconos mas de 1 vez

Publicado por Carolina (74 intervenciones) el 02/12/2014 22:37:10
JORGE, UN MILLON DE GRACIAS!!!!! ahora en un rato lo voy a probar!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

apertura de iconos mas de 1 vez

Publicado por Carolina (74 intervenciones) el 12/12/2014 19:20:09
Hola Jorge, ya implementé la tabla de sesiones y está funcionando perfecto (lo que hice fue una tabla de sesiones en la que, al abrir el sistema verifica que no haya un registro con el nombre de la pc en esta tabla y si es asi agrega un registro a esta tabla con el nombre del equipo y la fecha de ingreso y abre el sistema, y cuando se cierra el sistema se borra el registro correspondiente a esa pc).
Pero ahora tuvimos un problema y algunos equipos se cerraron de forma inesperada, entonces me quedó la sesión abierta en la tabla de sesiones y ya no pudieron volver a ingresar estos usuarios hasta que yo no les borré los registros de sesiones activas.
Como podría hacer para solucionar este problema?
Muchas gracias!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

apertura de iconos mas de 1 vez

Publicado por Mario Amaya mario.amaya.v@gmail.com (27 intervenciones) el 15/12/2014 17:32:23
Yo he implementado una solucion usando mutex y no tengo problema.
Este es el codigo que yo uso:

//Variable Externas
FUNCTION ulong CreateMutexA(ulong lpMutexAttributes, boolean bInitialOwner, ref string lpName) LIBRARY "KERNEL32.DLL"

FUNCTION ulong GetLastError () LIBRARY "KERNEL32.DLL"

FUNCTION ulong CloseHandle(ulong hMutex) LIBRARY "KERNEL32.DLL"

Y este es el codigo en el open del objeto aplicacion

String ls_Name
Uint rc2
ulong rc1
Boolean lb_inherit

lb_inherit = FALSE
ls_Name = "LEGALES" //Nobre a registrar en windows -Regularmente el nombre del ejecutable
rc1 = CreateMutexA(0, lb_inherit, ls_Name)
rc2 = GetLastError()

IF rc2 = 183 THEN // Mutex existe por lo qu ela aplicacion LEGALES esta actualmente en ejecucion
MessageBox("Aviso", "La aplicación está en ejecución")
CloseHandle(rc1)
HALT //cierro la aplciacion
ELSE
//Continua coorriendo la aplicacion
Open (w_conexion_sybase)
END IF



Y eso es todo. A mi me funciona a la perfecion en PB 12.5 .net y en WIN 7 PRO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar