Tôi muốn ứng dụng của mình ngăn Windows tắt. Tôi biết có một lệnh hệ thống có thể thực hiện việc này. Nhưng nó không hoạt động cho chương trình của tôi. Tôi sử dụng mã này để "hủy" một cửa sổ đã đóng:
void void Form1_FormClosing(người gửi đối tượng, FormClosingEventArgs e)
{
if (e.CloseReason.Equals(CloseReason.WindowsShutDown))
{
MessageBox.Show("Hủy tắt Windows");
chuỗi cmd = "tắt máy /a";
Process.Start(cmd);// để thực thi lệnh hệ thống.
}
}
Cũng sử dụng mã này nhưng không hoạt động :(:
Mẫu công khai1()
{
InitializeComponent();
SystemEvents.SessionEnding += SessionEndingEvtHandler;
}
void void SessionEndingEvtHandler(người gửi đối tượng, SessionEndingEventArgs e)
{
MessageBox.Show("Hủy tắt Windows");
chuỗi cmd = "tắt máy /a";
Process.Start(cmd);// để thực thi lệnh hệ thống.
}
Tôi sẽ biết ơn nếu ai đó có thể giải thích cho tôi cách "hủy" việc tắt Windows. Cảm ơn
Đây là lời khuyên rất thiếu khôn ngoan và Microsoft đang gây khó khăn nhất có thể để thực hiện điều này. Nếu người dùng muốn tắt thì đó là trách nhiệm của người dùng chứ không phải của ứng dụng. Theo bài viết của Microsoft Thay đổi tắt ứng dụng trong Windows Vista :
Việc hủy bỏ tắt máy im lặng sẽ không còn được phép
Trong Windows XP, các ứng dụng được phép phủ quyết WM_QUERYENDSESSION mà không hiển thị bất kỳ giao diện người dùng nào cho biết lý do tại sao chúng cần hủy tắt máy. Những "lỗi tắt máy im lặng" này khiến người dùng rất khó chịu, họ thường mất một hoặc hai phút để nhận ra rằng việc tắt máy không thành công vì không có giao diện người dùng. đã được hiển thị.
Windows Vista sẽ loại bỏ khả năng này bằng cách hiển thị giao diện người dùng ngay cả khi ứng dụng phủ quyết WM_QUERYENDSESSION.
...bên cạnh đó...
Ứng dụng không nên chặn tắt máy
Nếu bạn chỉ rút ra được một điều khi đọc chủ đề này, thì đó sẽ là điều này. Bạn sẽ mang lại trải nghiệm tốt nhất cho người dùng nếu ứng dụng của bạn không chặn việc tắt máy, trong phần lớn các trường hợp, họ có. mong muốn mạnh mẽ được thấy việc tắt máy thành công; chẳng hạn, họ có thể vội vàng rời văn phòng vào cuối tuần.
Nếu bạn thực sự cần can thiệp trong quá trình tắt máy, bạn nên đăng ký API mới:
Sử dụng API lý do tắt máy mới
API lý do tắt máy mới bao gồm ba chức năng:
BOOL ShutdownBlockReasonCreate(HWND hWnd, LPCWSTR pwszReason);
BOOL ShutdownBlockReasonDestroy(HWND hWnd);
BOOL ShutdownBlockReasonQuery(HWND hWnd, LPWSTR pwszBuff, DWORD *pcchBuff);
Một lần nữa, cách tốt nhất cho các ứng dụng Windows Vista khi tắt máy là chúng không bao giờ chặn việc tắt máy. Tuy nhiên, nếu ứng dụng của bạn phải chặn việc tắt máy, Microsoft khuyên bạn nên sử dụng API này.
Nhưng cuối cùng, tất cả những điều này sẽ cung cấp cho người dùng một giao diện người dùng thông báo cho người dùng rằng ứng dụng đang ngăn chặn việc tắt máy và hỏi người dùng xem họ có muốn tiếp tục và buộc tắt máy hay không. Nếu họ trả lời có, bạn không thể chặn nó và bạn không thể chặn giao diện người dùng.
Đọc bài viết MSDN mà tôi đã liên kết đến - nó giải thích mô hình bắt đầu bằng Vista. Cuối cùng, mô hình này là một trong những mô hình cung cấp cho người dùng quyền kiểm soát và ngăn chặn các ứng dụng vượt quá nhu cầu của người dùng.
Tôi là một lập trình viên xuất sắc, rất giỏi!