使用c#检测注销的问题

时间:2011-08-11 06:49:40

标签: c#

我尝试检测注销事件并将其写入文本中。

如何解决这个问题?我想在文本文件中写下注销时间,但是当我注销PC时不会创建文本文件。

static void Main(string[] args)
{
    SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
    Console.ReadLine();
    SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
}
static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
    if (e.Reason == SessionSwitchReason.SessionLogoff)
    {
        TextWriter tw = new StreamWriter("D:\\date.txt");
        tw.WriteLine("logoff" + DateTime.Now);
        tw.Close();
    }
    if (e.Reason == SessionSwitchReason.SessionLogon)
    {
        TextWriter tw1 = new StreamWriter("D:\\date.txt");
        tw1.WriteLine("logoff" + DateTime.Now);
        tw1.Close();
    }
}

1 个答案:

答案 0 :(得分:3)

除非应用程序具有读取您的控制台应用程序所没有的Windows消息的工具,否则这将无效。根据{{​​3}}的文档:

  

仅在消息泵运行时才会引发此事件。在Windows中   服务,除非使用隐藏的表格或消息泵已经   手动启动,不会引发此事件。对于代码示例   这显示了如何通过使用隐藏的表单来处理系统事件   Windows服务,请参阅SystemEvents类。

如果您坚持将其作为控制台应用程序运行,请检查SystemEvents.SessionSwitch Event这是在控制台应用程序中运行消息泵的教程。