0

如何知道用户执行了哪些操作,即关机、重启、待机、锁定或注销。我已经使用下面的代码来检查它,但我想识别每个案例并相应地执行操作。请建议一些方法来了解 Windows 窗体应用程序中的这些细节

 private static int WM_QUERYENDSESSION = 0x11;
    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (m.Msg == WM_QUERYENDSESSION)
        {
            MessageBox.Show(m.Msg.ToString() + " Endsession: 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);
    }
4

2 回答 2

3
static void Main()
{
    Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(SystemEvents_SessionEnding);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

static void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
{
    // Do something
}

可能还有其他一些SystemEvents您可能感兴趣的事件。

于 2011-03-09T06:31:19.550 回答
3

您需要检查消息的lParamWM_QUERYENDSESSION

文档所示:

  • 如果该参数为 0,则系统正在关闭或重新启动(无法确定发生了哪个事件)。

  • 如果参数为ENDSESSION_CLOSEAPP( 0x00000001),则表示应用程序正在使用必须替换的文件、正在为系统提供服务或系统资源已耗尽。

  • 如果参数为ENDSESSION_CRITICAL( 0x40000000),则强制关闭应用程序。

  • 如果参数为ENDSESSION_LOGOFF( 0x80000000),则用户正在注销。

于 2011-03-09T06:34:59.130 回答