0

SystemEvents.SessionEnding当我关闭我的系统时,事件没有被触发......

4

2 回答 2

2

您是否尝试过将此事件作为 microsoft 的示例来实现?像那样

重要提示:控制台应用程序不会引发 SessionEnding 事件。

仅当消息泵正在运行时才会引发此事件。在 Windows 服务中,除非使用隐藏表单或手动启动消息泵,否则不会引发此事件。有关显示如何使用 Windows 服务中的隐藏表单来处理系统事件的代码示例,请参阅 SystemEvents 类。-> .NET Windows 服务中的消息泵

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_Closing(
    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;
        }
    }
}

更多信息 ?请参见此处: SystemEvents.SessionEnding 事件

于 2013-04-10T07:27:08.533 回答
1

你可以试试这个——首先你打开 gpedit.msc,去配置 -> 管理模板 -> 系统 -> 关机选项。现在选择关闭阻止或取消关闭的应用程序的自动终止。

并阅读Microsoft SystemEvents.SessionEnding Event 文档以进行进一步开发。

于 2013-04-10T07:26:53.623 回答