Я выполняю эти примеры кодов на MSDN, чтобы предотвратить окна 7 от остановки до пользователя подтверждения:Возврат FALSE в WM_QUERYENDSESSION не может предотвратить Windows7 от остановки
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_QUERYENDSESSION)
{
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
systemShutdown = true;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
base.WndProc(ref m);
} //WndProc
private void Form1_FormClosing(System.Object sender, System.ComponentModel.CancelEventArgs e)
{
if (systemShutdown)
// Reset the variable because the user might cancel the
// shutdown.
{
systemShutdown = false;
if (DialogResult.Yes == MessageBox.Show("My application",
"Do you want to save your work before logging off?",
MessageBoxButtons.YesNo))
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
}
Но проблема я столкнулся на одном компьютере, даже если отображается «queryendsession: это выход из системы, завершение работы или перезагрузка» (поэтому получен WM_QUERYENDSESSION), Windows 7 не дождалась подтверждения и выключения пользователя. На других ПК эти коды работают хорошо. Поэтому мне интересно, что происходит. Большое спасибо.
Btw: Я попытался напрямую отправить e.Cancel = false в Form1_FormClosing, но ничего не произошло. Выключение системы и ожидания не было.
дней, что программы могут блокировать отключение закончено, и сделано с. Отображение окна сообщений - это плохая идея, пользователь не может добраться до нее, чтобы щелкнуть ее. Обратите внимание на свойство e.CloseReason в обработчике событий FormClosing, если машина выключается, вам придется сделать предположение. Немногие пользователи любят потерять работу. –
Спасибо, что напомнили мне, чтобы проверить причину. Причина в том, что системное решение одинаково для всех тестируемых ПК. Но только тот, который упоминается выше, немедленно выключится независимо от того, что вы делаете с e.Cancel. –