是否可以检测一次 Application.Exit 被调用,或者是否有一个 win32 函数来知道 Windows 何时因为关闭或其他原因而关闭您的程序。没有表格。
最佳答案
请参阅 MSDN 文档以了解 WM_QUERYENDSESSION和 WM_ENDSESSION消息; WM_ENDSESSION 消息的参数将告诉您应用程序是正常退出还是因为 Windows 正在关闭。您可以通过重写表单中的 WndProc 方法来处理这些消息,例如:
public partial class MainForm : Form
{
private const int WM_ENDSESSION = 0x0016;
private const uint ENDSESSION_CLOSEAPP = 0x1;
private const uint ENDSESSION_CRITICAL = 0x40000000;
private const uint ENDSESSION_LOGOFF = 0x80000000;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_ENDSESSION)
{
var sessionEnding = m.WParam.ToInt32() != 0;
if ((m.LParam.ToInt64() & ENDSESSION_CLOSEAPP) == ENDSESSION_CLOSEAPP)
{
// App closing
}
if ((m.LParam.ToInt64() & ENDSESSION_CRITICAL) == ENDSESSION_CRITICAL)
{
// Critical error
}
if ((m.LParam.ToInt64() & ENDSESSION_LOGOFF) == ENDSESSION_LOGOFF)
{
// User logging off
}
m.Result = IntPtr.Zero;
}
else
{
base.WndProc(ref m);
}
}
}
关于C# Windows 程序退出请求(检测 Application.Exit)无表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100393/