जवाबों:
आप SystemEvents.SessionEnding इवेंट को सौंपकर कुछ कोड के साथ ऐसा कर सकते हैं । जब आप लॉगऑफ़ या शटडाउन करने का प्रयास करेंगे तो यह एक संवाद बॉक्स दिखाएगा और पूछेगा कि क्या आप लॉगऑफ़ या शटडाउन को रद्द करना चाहते हैं।
कोड को विजुअल C # 2008 एक्सप्रेस संस्करण या विंडोज़ एसडीके के साथ मुफ्त में संकलित किया जा सकता है ।
एसडीके के साथ, निम्नलिखित कमांड का उपयोग करें:
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
HKEY_CURRENT_USER \ कंट्रोल पैनल \ डेस्कटॉप
सुनिश्चित करें कि AutoEndTasks 0 है, और WaitToKillAppTimeout को 20000 (2 सेकंड का डिफ़ॉल्ट मान) सेट करें। आप चाहें तो मूल्य अधिक सेट कर सकते हैं। त्रिशंकु टाइमआउट (डिफाल्ट 5000 है) भी है, लेकिन यह उन अनुप्रयोगों के लिए अधिक लागू होता है जो प्रतिक्रिया नहीं दे रहे हैं।
जब भी मैं XP पर शटडाउन करता हूं, यदि कोई कार्यक्रम व्यस्त है, तो यह मुझे एक प्रगति बार और 'अभी समाप्त' या 'रद्द' करने का विकल्प देता है।
'रद्द' पर क्लिक करने से शटडाउन प्रक्रिया बंद हो जाती है। हालाँकि, जो भी पहले से ही बंद है वह वापस नहीं आया है।
लेकिन यह मुझे उस समय को बचाने का समय देता है जो मैं बंद के पुन: प्रयास करने से पहले काम कर रहा था।