我正在使用C#构建一个窗口应用程序,它将在任何切换用户发生时通知我。现在正在使用" SessionSwitch"获取通知的事件。
private void startLisning()
{
Microsoft.Win32.SystemEvents.SessionSwitch +=new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
this.eventHandlerCreated = true;
}
private void SystemEvents_SessionSwitch(object sender, EventArgs e)
{
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "SwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);
}
但在这种情况下,它还会在" UNLOCK"发生了。这是我不想要的。 我只需要当任何用户在他的系统中切换用户时我的应用程序应该获得通知并将其记录到日志文件中。 它应该仅在锁定或switchUser发生时记录。
提前致谢。
答案 0 :(得分:0)
private void Form1_Load(object sender, EventArgs e)
{
startLisning();
}
private bool eventHandlerCreated;
private void startLisning()
{
Microsoft.Win32.SystemEvents.SessionSwitch +=new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch1);
this.eventHandlerCreated = true;
}
private void SystemEvents_SessionSwitch1(object sender, SessionSwitchEventArgs e)
{
switch (e.Reason)
{
case SessionSwitchReason.SessionLock:
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "LOCK\t" + DateTime.Now.ToString() + Environment.NewLine);
break;
case SessionSwitchReason.SessionLogon:
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "LOGIN\t" + DateTime.Now.ToString() + Environment.NewLine);
break;
case SessionSwitchReason.SessionUnlock:
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "UNLOCK\t" + DateTime.Now.ToString() + Environment.NewLine);
break;
case SessionSwitchReason.ConsoleConnect:
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "UnlockAfetSwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);
break;
case SessionSwitchReason.ConsoleDisconnect:
System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "SwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);
break;
}
}
这将在"切换用户"时通知当"用户恢复"时发生并通知。 ' SessionSwitchReason.ConsoleDisconnect'是任何切换用户发生时触发的事件。此代码在windows7中进行了测试,运行正常。
此代码创建一个" testtest.txt" Appdata文件夹中的日志文件。您可以使用Window + r到达那里并搜索'%appdata%'。
它记录通知如下: 1.使用日期时间登录 2.与日期时间锁定 3.解锁日期时间 4.使用datetime切换用户 5.使用datetime
切换用户恢复