2009-02-26 32 views
9

Tôi muốn có khả năng 1. phát hiện (và, nếu cần 2. hủy bỏ) OS tắt từ ứng dụng của tôi, tốt nhất là bằng cách sử dụng API Windows.Làm thế nào để hủy bỏ tắt máy trong Windows (XP | Vista) theo chương trình?

Tôi biết rằng có thể hủy bỏ tắt bằng tay bằng cách sử dụng lệnh shutdown -a Trong trường hợp xấu nhất, tôi có thể ShellExecute điều này, nhưng tôi đã tự hỏi nếu có cách nào tốt hơn để ngăn chặn việc tắt chương trình.

Có thể sẽ đủ để được thông báo một cách có lập trình rằng HĐH sắp ngừng hoạt động - cách thực hiện điều này?

Trả lời

6

Từ MSDN:

Thông điệp WM_QUERYENDSESSION được gửi khi người dùng chọn để kết thúc phiên làm việc hoặc khi một ứng dụng gọi là một trong những chức năng hệ thống tắt máy. Nếu bất kỳ ứng dụng nào trả về số không, phiên sẽ không kết thúc. Hệ thống ngừng gửi thông báo WM_QUERYENDSESSION ngay sau khi một ứng dụng trả về 0.

Vì vậy, WindowProc của ứng dụng hiện xử lý thông báo WM_QUERYENDSESSION và trả về 0.

Không mong đợi điều này đơn giản; như một phần thưởng, nó cũng hoạt động trên Windows 2000.

+0

Tốt, điều này không phải là wiki cộng đồng bằng cách này. :) – BobbyShaftoe

+0

Vâng, nó là chính xác * đủ * đối với tôi. Có thể có một số quirks hoặc các hoạt động nâng cao cho thông điệp này, và CW cho phép nhiều người chỉnh sửa hơn. – Piskvor

1

Liên quan đến 'đơn giản' trở về 0 để chặn tắt máy, nó không đơn giản như vậy nếu bạn muốn thực hiện nó theo đúng cách. Đặc biệt là trên Vista. Ví dụ: vui lòng đọc http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx

+0

Bài viết dường như nói rằng "nó phức tạp hơn nhiều trên Vista: Các ứng dụng phải chặn tắt máy nên sử dụng API lý do tắt máy mới". Không bao giờ trong toàn bộ bài viết nó đề cập đến một cách "thích hợp hơn" để xử lý điều này trên XP. Tôi đã bỏ lỡ một cái gì đó? – Piskvor

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