2008-12-13 38 views
5

Làm thế nào tôi có thể phát hiện hoặc được thông báo khi cửa sổ đăng xuất trong python?Phát hiện cửa sổ đăng xuất bằng Python

Edit:. Martin v Löwis' Câu trả lời là tốt, và làm việc cho một logout đầy đủ nhưng nó không làm việc cho một 'người sử dụng nhanh chóng chuyển đổi' sự kiện như nhấn Win + L đó là những gì tôi thực sự cần nó cho.

Chỉnh sửa: im không sử dụng gui này đang chạy dưới dạng dịch vụ

Trả lời

6

Bạn có thể phát hiện các sự kiện chuyển đổi người dùng nhanh bằng API dịch vụ đầu cuối mà bạn có thể truy cập từ Python bằng mô-đun win32ts từ pywin32. Trong ứng dụng GUI, hãy gọi WTSRegisterSessionNotification để nhận tin nhắn thông báo, WTSUnRegisterSessionNotification để ngừng nhận thông báo và xử lý thông báo WM_WTSSESSION_CHANGE trong quy trình cửa sổ của bạn.

Nếu bạn đang viết dịch vụ Windows bằng Python, hãy sử dụng chức năng RegisterServiceCtrlHandlerEx để phát hiện sự kiện chuyển đổi người dùng nhanh. Điều này có sẵn trong thư viện pywin32 như hàm RegisterServiceCtrlHandler trong mô-đun servicemanager. Trong số handler function của bạn, hãy tìm thông báo SERVICE_CONTROL_SESSIONCHANGE. Xem thêm tài liệu WM_WTSSESSION_CHANGE để biết chi tiết về các mã thông báo cụ thể.

Có một số chi tiết khác trong this thread từ danh sách gửi thư python-win32, có thể hữu ích.

Tôi hy vọng điều này sẽ hữu ích!

3

Trong ứng dụng bảng điều khiển, bạn có thể sử dụng win32api.SetConsoleCtrlHandler và tìm CTRL_LOGOFF_EVENT. Trong một ứng dụng GUI, bạn cần một cửa sổ đang mở và chờ thông báo WM_QUERYENDSESSION. Làm thế nào chính xác mà các công trình (và nếu nó hoạt động ở tất cả) phụ thuộc vào thư viện GUI của bạn.

+0

Như tôi biết, win32api cũng có thể được sử dụng trong các ứng dụng wxpython. Dù sao, tôi không thể đạt đến đỉnh của khả năng của mô-đun này (win32) ... –

+0

Điều này dường như chủ yếu là làm việc tuy nhiên nó không nhận được một 'chuyển đổi người dùng nhanh' ngay cả khi bạn nhấn win + l, bất kỳ ý tưởng ở đó? – UnkwnTech

Các vấn đề liên quan