![]() |
![]() |
| 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
|
||||
|
||||
|
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 |
|
#2
|
||||
|
||||
|
Parece que lo que pasa es que tus dos aplicaciones tienen problemas de comunicacion
Bien, pues podemos usar un fallo de seguridad de windows, o fallo de diseño como dicen ellos, que permite a una aplicacion mandar pulsaciones de teclado a otra si comparten el mismo escritorio aunque pertenezcan a usuarios distintos.En la aplicacion principal (lanzador o como la llames) la que recibe el mensage de finalizar sesion, utilizamos el siguiente codigo para simular un HotKey:
En la segunda aplicacion, la que corre como otro usuario, previamente hemos regsitrado el Hotkey Ctr+Shift+F12. Cuando recibimos el mensage del HotKey, cerramos la aplicacion, o realizamos cualquier otra tarea que necesitemos. Un poco de codigo, para ilustrar todo esto:
Bueno, aqui te dejo mi aportacion, se que no esta en la linea que estabais siguiendo, pero solo es una sugerencia. Espero que te sirva |
|
#3
|
||||
|
||||
|
A probar
Gracias seoane.
Probaré lo que me dices y ya os contaré. Es algo parecido a lo que yo quería hacer con la diferencia de que yo le quería enviar el mensaje WM_CLOSE para que se ejecutase el evento OnCloseQuery, pero como el lanzador no tiene ventana no he podido enviárselo o no sé. Hasta luego¡¡¡ |
|
#4
|
||||
|
||||
|
Muy Buenas a todos¡¡¡
Por fin ha funcionado. Ha costado sudor y lágrimas, pero bueno todavía no quiero echar las campanas al vuelo porque no lo he probado profundamente. Me ha funcionado de dos formas: 1ª.- Mandando el mensaje WM_CLOSE al lanzador para que al recibirlo cierre windows:
No me funcionaba porque tenía puesto Application.Title:=''; y además yo pensaba que como no tenía ventana activa, pues usaba Application.ShowMainForm:=False; ), no le podía enviar el mensaje. 2ª.- Igual que antes pero enviando un HotKey al lanzador (como indica arriba seoane), en lugar de WM_CLOSE. Cuando el lanzador lo detecta Cierra Windows y se cierra él. Muchas Gracias a todos, sobretodo a Lepe que le he estado dando la tabarra durante bastante tiempo.Saludos. Última edición por PoZi fecha: 03-05-2006 a las 20:49:13. |
![]() |
| 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 |
|