使用c#检测下线的问题

本文关键字:问题 检测 使用 | 更新日期: 2023-09-27 18:05:28

我尝试检测下线事件并将其写入文本。

如何解决这个问题?我想把注销时间写在一个文本文件里,但是当我注销电脑的时候没有创建这个文本文件。

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

使用c#检测下线的问题

这将无法工作,除非应用程序有读取Windows消息的功能,而您的控制台应用程序没有。根据SystemEvents的文档。SessionSwitch事件:

此事件仅在消息泵正在运行时引发。在Windows中服务,除非使用了隐藏表单或消息泵手动启动时,将不会引发此事件。对于代码示例控件中的隐藏窗体来处理系统事件Windows服务,参见SystemEvents类。

如果你坚持把它作为一个控制台应用程序运行,查看控制台应用程序中的处理消息,这是一个在控制台应用程序中运行消息泵的教程。