![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Buscate la funcion RunAndWait32 que anda por el foro.
El lanzador abre el programa de Bases de datos y se queda esperando con esa función hasta que termine el programa de BBDD. El programa de bases de datos pone el Timer en marcha y cuando el tiempo expire, informa al usuario y se cierra el programa. Ahora que se ha cerrado, el lanzador continua su ejecución y cierra el sistema con el Logoff. Como el programa lanzador se está ejecutando en el contexto de los demás procesos, si cerrará el sistema bien. EDITO:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 07-04-2006 a las 00:19:20. |
|
#2
|
||||
|
||||
|
Hola Lepe.
Muy buena idea. Probaré lo que me dices y ya os contaré pero estoy seguro que funcionará. Muchas Gracias de verdad. Os felicito por esta gran comunidad. Saludos |
|
#3
|
||||
|
||||
|
Hola¡¡¡
Perdonenme por haber respondido tan tarde, pero he estado probando cosas y no he podido antes. La idea que me dio Lepe funciona bien salvo cuando el lanzador se encuentra esperando la finalización del programa prinicipal (en WaitForSingleObject) y el usuario pulsa logoff. En este caso windows no puede cerrar el lanzador puesto que se encuentra ocupado y aparece la pantalla de End Now o Cerrar ahora. Si le pulso al botón,el programa efectivamente se cierra pero el código del evento OncloseQuery, donde almaceno la hora y fecha de salida del usuario, no se ejecuta. Por cierto les informo, por si a alguien le puede interesar, que al usar la función CreateProcessWithLogonW aparte de dejar de funcionar la función ExitWindowsEx también lo hace el evento OnCloseQuery del programa lanzado. Por ese motivo yo he tenido que guardar los datos de salida del usuario desde el lanzador, pero como ven no consigo hacerlo . |
|
#4
|
||||
|
||||
|
Mira este hilo que he "reabierto" hace unos minutos, creo que los tiros van por ahí.
El mensaje de roman, como siempre, no tiene desperdicio .Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#5
|
||||
|
||||
|
Hola¡¡¡
He probado lo que me dices Lepe y lamentablemente no me funciona: He hecho todo lo que dice Roman, he probado a guardar los datos en la función WMEndSession, en la WMQueryEndSession, con Msg.Result:=1 sin él.... y nada. Parece ser que al lanzar el programa con Createprocesswithlogon se crea un proceso aislado del resto como si estuviera en una sesión distinta y para windows es como si no existiera (lo tiene marginado); Por eso ni funciona el ExitwindowsEx ni el evento OnCloseQuery ya que no le manda los mensajes EndSession ni QueryEndSession. También he probado lo siguiente: Al lanzador le he quitado WaitForSingleObject y ShutDownWindows y le he puesto, como explica en el foro Roman, lo siguiente:
De esta forma al hacer un log off se guarda la hora y fecha de salida, puesto que no está ocupado con WaitForSingleObject, y cuando quiera cerrar la sesión de windows desde el programa principal solo tengo que cerrar el lanzador para que se ejecute el código del evento OnCloseQuery y esto lo he hecho con la función KillTask (ver código). Pero al cerrarlo no se ejecuta el evento OnCloseQuery, sólo cierra el proceso y ya está. Saludos¡¡¡ Última edición por PoZi fecha: 26-04-2006 a las 14:23:51. |
|
#6
|
||||
|
||||
|
Pero a ver....
El usuario pulsa Logoff... pero ¿donde? Se supone que el usuario pulsa un botón que dice Logoff en tu programa de BBDD, pero en realidad lo que hace tu programa de BBDD es cerrarse él (Application.Terminate, o bien cerrar el Form Principal), y puesto que el lanzador está esperando ese momento, el lanzador es el que continúa su ejecución y hace el Logoff del sistema. ¿no quedamos en eso? saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#7
|
||||
|
||||
|
Buenas¡¡
Mi programa no tiene ningún botón de log off. Quizá no me haya explicado bien. Esto es lo que deseo hacer: Al iniciarse la sesión el programa bloquea el Pc (Ctrl+Alt+Supr, Alt+F4, etc.) y muestra un form en el que hay que introducir el usuario y la contraseña. Una vez introducidos, comprueba en una base de datos si son correctos y si el usuario accede en su franja horaria permitida. Si todo está bien, el form se minimiza, se desbloquea el Pc a excepción del Ctr+Alt+Supr (para evitar que cierre mi aplicación) y se guarda el nombre del usuario y la fecha y hora de acceso para tener un control de los usuarios que han accedido al Pc. El usuario trabaja en el Pc de forma normal. Cuando termina su trabajo cierra la sesión de windows presionando a Inicio/Log off. Si antes de terminar su trabajo llega la hora en que termina su franja horaria de acceso, el programa debe cerrar la sesión. En ambos casos se debe guardar la hora y fecha de salida. Los problemas surgieron a raiz de utilizar el lanzador que da privilegios de administrador al programa. El ExitWindowsEx que utilizaba para cerrar la sesión de windows cuando terminaba el tiempo de acceso al sistema del usuario dejó de funcionar y el evento OnCloseQuery, donde tenía puesto el código que guardaba la hora y fecha de salida del usuario y que se ejecutaba al cerrar el programa, ya fuera por windows (al presionar al botón log off de windows) o por el propio programa (al ejecutarse la instrucción Close , también dejó de funcionar.Por estos motivos tuve que cerrar la sesión de windows y guardar los datos de salida del usuario desde el lanzador (como muy acertadamente me indicaste tú Lepe). Y eso hice. Todo funcionaba a la mil maravillas salvo cuando el lanzador se encontraba esperando en WaitForSingleObject y el usuario decidía cerrar la sesión de windows porque había terminado su trabajo. Supongo que lo que ocurría es que windows le mandaba el mensaje QueryEndSession pero al estar ocupado esperando la finalización del programa principal no respondía con el famoso Msg.Result:=1. Windows entonces mostraba el mensaje End Now. Si se le aceptaba, la sesión se cerraba pero el lanzador no guardaba la hora y fecha de salida. Por eso hice la prueba que mencioné antes: Cita:
Gracias y Saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Dar privilegios del SYSDBA a otro usuario | Eolo | Firebird e Interbase | 3 | 21-03-2004 05:48:15 |
| Roles - Usuarios y privilegios | Osorio | Firebird e Interbase | 2 | 13-02-2004 23:34:31 |
| Privilegios en interbase | acrophet | Conexión con bases de datos | 1 | 09-02-2004 15:07:35 |
|