salir del autexec


([N1] jucehovi.gmail) #1

que sentencia usaria en el evento oninit de mi autoexec para si no cumple una cierta validacion me bote del sistema?





([N2] overall) #2

Creo que de momento no existe ninguna función al respecto.

Saludos

Overall


([N4] Fran) #3

Buenas tardes:

 

No hay función al respecto... yo intenté una cosilla para la aplicación del concurso de vOpenApps, pero como iba justo de tiempo no llegué a terminarlo.

 

La idea era:

 

- Definir una dll en el proyecto, la que se utiliza para generar pulsaciones de teclas.

- Definir un formulario sin origen en el menú principal.

- En un evento asociado a la señar on-init del formulario, comprobar la condición para salir.

- Si se cumple, generar por dll la pulsación de la tecla ESC, para que se cierre vClient.

 

Ya digo que no llegué a terminarlo, pero lanzo la idea y si alguien tiene tiempo de acabarlo... que lo publique. ;-)

 

Un saludo,

 

Fran

fjpnovo@efeuno.org

www.efeuno.org

 


([N1] jucehovi.gmail) #4

Gracisas por las respuesta vere lo de la dll, y les cuento !!!!


(ame) #5


(ame) #6

Yo lo arreglé con esta DLL del sistema:

 

[attachment=8320,833] [attachment=8320,834] [attachment=8320,835]


([N2] overall) #7

Buena aportación Ame, pero V7 es  multiplataforma, que pasa con Mac, linux?

Yo también quisiera hacer algo parecido, pero con el bloqueo de la aplicación cuando el usuario lo creyera oportuno (adjunto imagen), pero no veo como resolverlo, ya que las ventanas se pueden cerrar con la "X".

Si hay alguna idea al respecto lo agradecería.

Saludos

Overall

[attachment=8321,836]


(ame) #8

Cierto Overall, supongo que en esos entornos no nos queda más remedio que usar las órdenes del shell, porque el objeto librería externa sólo funciona para Windows, ¿no? No estoy seguro de ello, por eso pregunto.

Suponiendo que sólo es válido para Windows, podríamos usar la orden "kill -9 PID", habiendo obtenido previamente el PID del vClient nada más arrancar la aplicación. No recuerdo ahora bien y tampoco puedo probarlo, pero creo que un "echo $$" devolvía el PID del proceso que lo ejecuta, lo digo por si tenemos varias instancias de vClient ejecutándose.

Para el tema del bloqueo, la cosa está más chunga. Se me ocurre por ejemplo, que el formulario donde se muestra el bloqueo tenga una variable local booleana inicializada a falso. Si se pincha en la X la variable no se modifica, y desde donde se disparó este formulario se puede comprobar el valor de la variable, si es falso se muestra su mensaje correspondiente y se vuelve a disparar el formulario que bloquea la aplicación, si es verdadero, se sigue con la ejecución normal del programa. Evidentemente aquí está implícito un bucle: "mientras que la variable valga falso, mostrar mensaje y disparar objeto formulario".

No he podido comprobar la viabilidad de esto así que de momento todo es teoría. No se si funcionaría del todo. Espero tus comentarios.

 

Un saludo.

 

José Luis.

 


([N2] overall) #9

Gracias Jose Luis, probaré la alternativa que me comentas.

Gracias y saludos

Overall


(ame) #10

Hola a todos, retomo este post para rectificar/mejorar la solución que propuse.

 

Resulta que si usamos la función "ExitProcess", el sistema manda una señal "kill" a la aplicación vClient. ¿Y qué es una señal? Una señal es una manera que tienen los Sistemas Operativos de comunicar procesos. Para terminar un proceso existen dos señales, una que lo termina de manera forzada, y otra más diplomática. La señal "kill" indica al proceso al cual se le manda que debe terminar su ejecución de manera forzada (lo que se conoce como matar un proceso). El problema de esta señal es que no da opción al proceso a terminar de manera adecuada (cerrar ficheros que pudiera tener abiertos, conexiones remotas, etc.), por lo que se usa generalmente para procesos que han quedado bloqueados. El otro tipo de señal INSTA al proceso a que acabe su ejecución, realizando las rutinas pertinentes para cerrar todas las conexiones y demás recursos que tuviera asignados, es una forma más "limpia" de terminar un proceso.

 

¿En qué se traduce esto con vServer y vClient? Como vClient abre una conexión remota con vServer, si al no validarse el usuario terminamos vClient de manera forzada, no comunica a vServer que ha terminado la conexión con él, con lo que nos quedarán enganches, los cuales podemos comprobar con vAdmin. Esto podría llegar a ser un problema mayor para los usuarios que tuvieran sólo UNA licencia de ejecución de vServer.

 

Aclarado esto, paso a mostrar la mejora de la solución, aprovechando además para añadir una duda que me gustaría que me resolviérais: ¿cómo ocultar la típica ventana de MS-DOS cuando usamos la instrucción "Lanzar aplicación"?

 

Saludos.

[attachment=8598,851] [attachment=8598,852]