2008-12-13 27 views
5

¿Cómo puedo detectar o recibir una notificación cuando Windows cierre sesión en python?Detectar el cierre de sesión de Windows en Python

Editar: La respuesta de Martin v. Löwis es buena, y funciona para un cierre completo pero no funciona para un evento de 'cambio de usuario rápido' como presionar win + L, que es para lo que realmente lo necesito.

Editar: no im utilizando una GUI esto se ejecuta como un servicio

Respuesta

6

Puede detectar eventos de cambio rápido de usuario utilizando la API de Servicios de Terminal Server, a la que puede acceder desde Python utilizando el módulo win32ts desde pywin32. En una aplicación GUI, llame al WTSRegisterSessionNotification para recibir mensajes de notificación, WTSUnRegisterSessionNotification para dejar de recibir notificaciones, y maneje el mensaje WM_WTSSESSION_CHANGE en su procedimiento de ventana.

Si está escribiendo un servicio de Windows en Python, use la función RegisterServiceCtrlHandlerEx para detectar eventos rápidos de cambio de usuario. Esto está disponible en la biblioteca pywin32 como la función RegisterServiceCtrlHandler en el módulo servicemanager. En su handler function, busque la notificación SERVICE_CONTROL_SESSIONCHANGE. Consulte también la documentación WM_WTSSESSION_CHANGE para obtener detalles de los códigos de notificación específicos.

Hay más detalles en this thread de la lista de correo de python-win32, que pueden ser útiles.

Espero que esto ayude!

3

En una aplicación de consola, puede utilizar win32api.SetConsoleCtrlHandler y buscar CTRL_LOGOFF_EVENT. En una aplicación GUI, necesita abrir una ventana y esperar el mensaje WM_QUERYENDSESSION. La precisión con la que funciona (y si funciona en absoluto) depende de la biblioteca de su GUI.

+0

Como sé, win32api también se puede usar en aplicaciones wxpython. De todos modos, no puedo alcanzar la cima de las capacidades de este módulo (win32) ... –

+0

Esto parece funcionar en su mayoría sin embargo no se obtiene un 'cambio rápido de usuario' incluso si se golpea win + l, ¿alguna idea allí? – UnkwnTech

Cuestiones relacionadas