2009-06-19 25 views
6

Tôi có một ứng dụng chạy mỗi giờ trên Máy Windows XP. Để chạy đúng cách, ứng dụng này yêu cầu phiên hiện tại phải được mở khóa. Vì vậy, tôi đã tự hỏi nếu có một cách để biết nếu phiên Windows hiện tại bị khóa hay không với C# và .NET 3.5.Cách xác định xem phiên Windows hiện tại có bị khóa hay không?

CẬP NHẬT: Ứng dụng không thể nghe các sự kiện SessionNotification. Ứng dụng có thể được khởi động bất cứ lúc nào và chấm dứt khi hoàn thành.

Cảm ơn!

+0

Nó làm gì mà nó không thể chạy khi phiên bị khóa? – jmucchiello

Trả lời

1

Đây là những bản chưa được tôi kiểm chứng, nhưng trông thú vị. Tôi sẽ cung cấp cho họ một thử nghiệm, nhưng Visual Studio của tôi dường như ít hơn hạnh phúc với tôi vào lúc này.

+0

Liên kết eggheadcafe là 404'd – hometoast

+0

Liên kết bộ nhớ cache là 404'd – jnm2

0

Tôi đã từng sử dụng chức năng GetForegroundWindow() để xác định xem trình bảo vệ màn hình có đang chạy hay không. Nếu giá trị trả về là NULL, thì trình bảo vệ màn hình (hoặc, có lẽ, một máy trạm bị khóa) đang hoạt động. Lưu ý rằng đây là trong những ngày đầu của Windows NT, không phải là tài liệu để làm điều này, và không có đảm bảo rằng nó vẫn sẽ làm điều tương tự ngày hôm nay.

Nhìn vào tham chiếu API Win32, bạn có thể sử dụng một cái gì đó như OpenInputDesktop() để nhận được HDESK của màn hình hiện đang hoạt động. Nếu bạn không thể xử lý desktop hoặc nếu nó khác với desktop của bạn thì ứng dụng của bạn đang chạy trên một desktop không hoạt động (và máy trạm có lẽ đang ở trạng thái bảo vệ màn hình hoặc bị khóa). Không đảm bảo rằng phương pháp này sẽ hoạt động, nhưng nó có thể đáng để điều tra.

0

Tôi đã trả lời câu hỏi tương tự here. Tôi nghĩ rằng phương pháp 2 & 3 có thể được tăng cường để phát hiện trạng thái bị khóa.

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