มีทางเลือกใด ๆ ของ Windows XP สำหรับกระบวนการปิดระบบของ Windows Vista ซึ่งแจ้งให้ผู้ใช้ทราบว่าจะดำเนินการต่อหรือยกเลิกการปิดระบบในกรณีที่บางโปรแกรมมีข้อมูลที่ไม่ได้บันทึกหรือไม่?
มีทางเลือกใด ๆ ของ Windows XP สำหรับกระบวนการปิดระบบของ Windows Vista ซึ่งแจ้งให้ผู้ใช้ทราบว่าจะดำเนินการต่อหรือยกเลิกการปิดระบบในกรณีที่บางโปรแกรมมีข้อมูลที่ไม่ได้บันทึกหรือไม่?
คำตอบ:
คุณสามารถทำได้ด้วยรหัสบางอย่างโดยการส่งเหตุการณ์SystemEvents.SessionEnding นี่จะแสดงกล่องโต้ตอบเมื่อคุณพยายามออกจากระบบหรือปิดเครื่องและถามว่าคุณต้องการยกเลิกการออกจากระบบหรือปิดเครื่อง
รหัสสามารถรวบรวมฟรีกับทั้งVisual C # 2008 Express Edition ที่หรือมีหน้าต่าง SDK
ด้วย sdk ให้ใช้คำสั่งต่อไปนี้:
csc.exe /out:StopShutdown.exe /target:winexe StopShutdown.cs
นี่คือรหัส:
using System;
using System.Windows.Forms;
using Microsoft.Win32;
namespace StopShutdown
{
static class Program
{
[STAThread]
static void Main()
{
string desktopRegKey = @"HKEY_CURRENT_USER\Control Panel\Desktop";
Registry.SetValue(desktopRegKey, "AutoEndTasks", 0);
Registry.SetValue(desktopRegKey, "WaitToKillAppTimeout", 20000);
Registry.SetValue(desktopRegKey, "HungAppTimeout", 20000);
Form AppForm = new Form()
{
ClientSize = new System.Drawing.Size(0, 0),
ControlBox = false,
FormBorderStyle = FormBorderStyle.None,
Opacity = 0,
ShowIcon = false,
ShowInTaskbar = false,
SizeGripStyle = SizeGripStyle.Hide,
};
SystemEvents.SessionEnding += (_e, e) =>
{
DialogResult dr = MessageBox.Show(
"Cancel shutdown?"
, "Shutdown",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
e.Cancel = (dr == DialogResult.Yes);
};
Application.Run(AppForm);
}
}
}
แก้ไข:
หากคุณยินดีทำการแก้ไขรีจิสทรีเล็กน้อย ... เริ่ม -> เรียกใช้ -> regedit
แผงควบคุม \ Desktop \ HKEY_CURRENT_USER \
ตรวจสอบให้แน่ใจว่า AutoEndTasks เป็น 0 และตั้งค่า WaitToKillAppTimeout เป็น 20000 (ค่าเริ่มต้นคือ 2 วินาที) คุณสามารถตั้งค่าที่สูงขึ้นหากคุณต้องการ นอกจากนี้ยังมี HungAppTimeout (ค่า defalt คือ 5,000) แต่จะใช้กับแอปพลิเคชันที่ไม่ตอบสนองมากขึ้น
เมื่อใดก็ตามที่ฉันปิดการทำงานของ XP หากโปรแกรมไม่ว่างโปรแกรมจะให้แถบความคืบหน้าและตัวเลือก 'สิ้นสุดตอนนี้' หรือ 'ยกเลิก'
การคลิก 'ยกเลิก' จะหยุดกระบวนการปิดระบบ อย่างไรก็ตามสิ่งที่มันได้ปิดไปแล้วไม่ได้กลับมา
แต่ให้เวลาฉันในการบันทึกสิ่งที่ฉันกำลังทำอยู่ก่อนที่จะลองปิดระบบอีกครั้ง