2012-02-20 36 views
8

Trên Windows chỉ ứng dụng lấy nét nhận được sự kiện hiển thị công suất qua thông báo WM_SYSCOMMAND (với wParam đặt thành SC_MONITORPOWERlParam đại diện cho trạng thái nguồn mới).Giám sát sự kiện hiển thị nguồn trên Windows XP

Trên Windows Vista và sau đó, bất kỳ ứng dụng có thể được thông báo về các sự kiện điện hiển thị bằng cách gọi RegisterPowerSettingNotification chức năng, sử dụng GUID_SESSION_DISPLAY_STATUS GUID.

Có cách nào để đạt được cùng một kết quả trên Windows XP, ở cấp ứng dụng (tức là không sử dụng mã đang chạy ở chế độ hạt nhân) không?

+1

Trình điều khiển nhận được thông báo về các sự kiện quyền lực. –

+0

@BenVoigt: Tôi đang tìm kiếm điều gì đó đơn giản hơn, ở cấp ứng dụng ... – Wizard79

Trả lời

2

Tất cả những gì bạn cần làm là xử lý WM_SYSCOMMAND. Tùy chọn tôi có thể nghĩ:

  • Sử dụng SetWindowsHookEx cho điều này (với WH_CBT).

  • Tiêm một DLL vào mọi quá trình gắn CreateProcess và tự tiêm vào tất cả các quy trình trong tương lai, về cơ bản sẽ móc toàn bộ hệ thống. Các DLL nói trên sau đó sẽ phân lớp tất cả các cửa sổ trong quá trình hiện tại, và bạn có thể xử lý WM_SYSMESSAGE từ đó.

+2

+1 Tôi nghĩ rằng móc có thể là cách tốt nhất/duy nhất – Mehrdad

+1

@ Jonathanathanle: 'WM_SYSMESSAGE' không tồn tại. Bạn có nghĩa là 'WM_SYSCOMMAND'? – Wizard79

+0

@Lorenzo: yeh, đó là lỗi đánh máy. Lỗi của tôi. –

-1

Bạn không thể xử lý tin nhắn WM_POWERBROADCAST trong WindowProc của mình và một khi đã nhận được, hãy gọi GetSystemPowerStatus?

+0

Không, WM_POWERBROADCAST không thông báo cho các sự kiện quyền lực hiển thị (xem http://msdn.microsoft.com/en-us/library/windows/ máy tính để bàn/aa373247 (v = vs.85) .aspx) – Wizard79

+0

Tôi nhận được phiếu bầu thực sự? Bạn đã thử nó chưa? Tôi đã tìm kiếm một thay thế hoạt động trên XP và nhận được từ đây: http://www.nxtbook.com/nxtbooks/cmp/msdnmag0707/index.php?startid=49 – Gunner

+1

Chắc chắn bạn đã nhận được phiếu bầu. Câu trả lời của bạn là tắt chủ đề, tôi cũng đã giải thích lý do tại sao: WM_POWERBROADCAST không thông báo cho các sự kiện quyền lực _display_. Bạn thậm chí đã đọc câu hỏi chưa? Và liên kết tôi đã cung cấp cho bạn trong bình luận trước của tôi cho câu trả lời của bạn? – Wizard79

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