FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error al entrar en sesion windows
Hola a todos de nuevo!!
Como dije anteriormente, he estado trabajando con una aplicación tipo gadget... Desde hace tiempo que lo monte en mi Laptop, he tenido un problema que no tengo ni idea de como resolverlo.... Lo que pasa es que cada vez que trato de entrar a mi sesion ya sea por inactividad o por cerrarla, mi windows 7 me manda un error de que el programa a dejado de trabajar correctamente, y muchas ventanitas de error... Segun supongo yo, creo que es por el timer que mueve la form, es que siempre se esta moviendo la aplicacion y cuando se cierra sesion algo pasa, eso creo yo... La cuestion es que como soluciono ese problema? como detengo el timer antes de que se cierre sesion o antes de que se suspenda?.. Los dejo con mis dudas y cualquier ayuda pues sera bienvenida! Última edición por LuisAlf:: fecha: 27-09-2010 a las 23:55:55. Razón: escritura |
#2
|
||||
|
||||
Me da la sensación de que creas muchos TTimer y cada ventana de error se corresponde con uno de ellos. No sé los detalles, pero posiblemente cada TTimer cree un hilo nuevo, de ahí el problema.
La solución está en capturar el mensaje de cierre de sesión, que ahora mismo no recuerdo cuál es pero está descrito en la documentación del API. |
#3
|
|||
|
|||
Mira...
Nada mas manejo dos timers... Estuve comentando codigo...hasta ver cual era el del conflicto y si es dentro de uno de los timers... Es una funcion que utilizo para detectar que el cursor esta fuera de la forma...
Y es en este bloque donde sale el error....detectado por Windows cuando trato de entrar al escritorio...(ya que si quito el if no me vuelve a saltar el error de la aplicacion al entrar al escritorio) Entonces...como le hago para detener el timer antes de que se suspenda la laptop....??? Estuve implementando el manejador para el mensaje WM_QUERYENDSESSION Pero no me ejecuta el showmessage que pongo en el... |
#4
|
||||
|
||||
Disculpa la tardanza.
Cita:
Supongo (y es una suposición) que el "ShowMessage" intenta asignar la ventana principal de tu aplicación como "padre", pero al no existir esta el sistema simplemente ignora la petición. Pero ya digo que es una suposición, porque hace mucho que no me veo en estos bretes. |
#5
|
|||
|
|||
Que onda!! Gracias por responder... Sabes que encontre el motivo de porque sale ese error... Estuve programando el xeyes en otra aplicacion y me di cuenta que tambien le pasa lo mismo.... Y Yo creo que es por las propiedades del objeto mouse.curpos.X y mouse.curPos.y..... Ya que en los dos utilizo el acceso a las propiedades del mouse.... Cualquiera que quiera intentarlo para probar lo que les dijo.. pongan un timer que se este ejecutando muy rapido para que este leyendo estas propiedades del mouse....claro en una lap con windows 7..no se si pase lo mismo en una pc...
y traten de suspenderla y entrar otra vez a su session y el error se produce luego restaurada la session... La verdad no se como proceder... |
#6
|
||||
|
||||
¡Pues claro que falla, jomío! ¿A quién se le ocurre utilizar un "timer" para leer la posición del ratón? Si es que...
Después de la bronca, te recomiendo que replantees la aplicación. Casi es mejor que utilices un bucle (cuasi)infinito para hacer esto. Lo que no tengo muy claro es dónde colocarlo, pero sería tal que así:
Como digo, el problema aquí reside en desde dónde llamar al método "BuclePrincipal". |
#7
|
|||
|
|||
Cita:
Por lo que entiendo, el problema lo tiene cuando se cierra la sesión y no finaliza el programa. Por lo que imagino, lo que ocurre es que el programa de LuisAlf no puede acceder a los datos del mouse, porque este está deshabilitado para la sesión o algo similar. Por tanto, la solución sería capturar la salida de sesión (no sé como), y si se sale de sesión, parar de leer las coordenadas. O quizá con un bloque try..finally se solucionaría todo... |
#8
|
|||
|
|||
Cita:
Mira exacto!!! No hay ningun problema al utilizar un timer para este objetivo, ya que es un procedimiento que se llama cada determinado tiempo y es exactamente lo que tu me planteaste un procedimiento que lee las posiciones del cursor...cada cierto tiempo... Esto ya lo habia contemplado, ya que un amigo me dijo algo de manejo de la excepcion... para encapsular el error y si...por hay fue mi solucion, yo batallando con la suspension de la sesion...jajaja mal enfoque del problema Asi es lo que hice ayer fue eso, manipule el evento manejador de excepciones creando un procedimento de tipo object, y que creen lo que puse en el procedure... pues "nada" jajaja Dejenme explicarme, lo que pasa es que puse un showmessage en el procedimento para ver si encapsulaba el error que me mostraba windows y si efectivamente el showmessage se muestra en lugar de las otras ventanas del error que el propio windows me mostraba... Y como yo no quiero que muestre ningun mensaje pues le quite el showmessage... de esta forma el error no se muestra y la aplicacion sola se estabiliza, trabajando correctamente despues de restaurada la sesion.... No se si sea la forma mas ortodoxa de solucionarlo pero funciona.... Última edición por LuisAlf:: fecha: 19-10-2010 a las 17:24:53. |
#9
|
||||
|
||||
Pues, precisamente, en que el timer puede "activarse" fuera de contexto (que es lo que sospecho que le pasa a nuestro compañero LuisAlf:. No se puede garantizar que las interrupciones se produzcan en un momento determinado: se producirán cuando se produzcan y ya está.
Un ejemplo práctico es el procedimiento "Sleep". Tú le puedes decir que duerma durante 100 milisegundos, pero nada garantiza que exactamente 100 milisegundos después el sistema devuelva el control al programa. No sé cómo implementa los timer Delphi (supongo que usando MSG_TIMER del API, y posiblemente con un hilo [fork] paralelo) pero las posibilidades de que pase lo mismo son importantes. No olvidemos, tampoco, que Windows no es un sistema operativo de "tiempo real", como sí lo es MS-DOS, por ejemplo. Si se quiere utilizar un timer, habrá de asegurarse de eliminarlo antes de que se salga del contexto, o al menos evitar que funcione si está fuera de él. Se me ocurre que antes de obtener las coordenadas del ratón, quizá se pueda comprobar si el objeto "mouse" o el contenedor del mismo sigue existiendo. Algo así como:
O quizá usar "SELF" o "Application" en lugar de "mouse". <-- Evitar doble post --> Cita:
Aunque funcionar, funcionar... El problema aquí es que si se produce otro error, entonces no te enterarás... Quizá sea buena idea dejar constancia de los errores en algún sitio, como por ejemplo en un archivo de disco, por si las moscas. |
#10
|
|||
|
|||
Cita:
Pues la verdad no se me habia ocurrido lo del mouse<>nil Creo que tambien podria funcionar!!, voy a intentarlo, en cuanto a los errores, no cre oque se produzca otro error importante, yo creo que en este era en lo que estaba batallando y ya funciona bien... jjaja Gracias!!! |
#11
|
|||
|
|||
No, lo del mouse<>nil no funciona...
Lo que pasa es que el "objeto" o referencia si esta creado, el problema es que no se puede acceder a las propiedades antes mencionadas... Hablando del procedimiento que no hace nada, es posible encapsular nada mas el error EOeserror del objeto mouse, en el parametro "e" del procedimiento, y no hacer nada con el... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Mensaje Inicio Sesion windows XP | cacu | Windows | 3 | 19-02-2009 16:57:31 |
Obtener id de la Sesion de Windows | pedrnsanmar | API de Windows | 4 | 13-05-2008 16:32:11 |
Bloqueo de sesión Windows XP | Val | API de Windows | 2 | 11-10-2007 08:23:10 |
Cerrar sesion Windows XP | Caral | Windows | 9 | 19-09-2006 00:42:34 |
Sesion (de Windows) Oculta | Jose_Pérez | Redes | 1 | 25-06-2005 16:43:08 |
|