gpt4 book ai didi

c# - 捕获所有用户的 Windows 用户 session 切换事件?

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:26 24 4
gpt4 key购买 nike

我正在制作一个 Windows 桌面应用程序,每台机器只运行一个实例。启动后即使是 session 解锁,我也需要在用户登录时收到通知吗?SystemEvents.SessionSwitch 事件仅捕获启动应用程序的用户的 session 切换,而我需要捕获所有用户的事件。

最佳答案

我认为你必须使用 Windows Service ,它在用户登录到您的系统之前执行,以捕获所有事件。之后将更改通知您的应用程序。我使用以下方法。

  1. ServiceBase.OnSessionChange 捕捉不同的事件事件处理程序。
  2. SessionChangeDescription中的SessionId获取关联的用户信息结构,来自 wtsapi32WTSQuerySessionInformation方法。

我在下面添加了这个实现的基本部分。

public class CustomService : ServiceBase
protected override void OnSessionChange(SessionChangeDescription desc)
{
switch (desc.Reason)
{
case SessionChangeReason.SessionLogon:
var user = CustomService.UserInformation(desc.SessionId);
CustomService.DoWhatEverYouWant(user);
break;
}
}

private static User UserInformation(int sessionId)
{
IntPtr buffer;
int length;

var user = new User();

if (NativeMethods.WTSQuerySessionInformation(IntPtr.Zero, sessionId, NativeMethods.WTS_INFO_CLASS.WTSUserName, out buffer, out length) && length > 1)
{
user.Name = Marshal.PtrToStringAnsi(buffer);

NativeMethods.WTSFreeMemory(buffer);
if (NativeMethods.WTSQuerySessionInformation(IntPtr.Zero, sessionId, NativeMethods.WTS_INFO_CLASS.WTSDomainName, out buffer, out length) && length > 1)
{
user.Domain = Marshal.PtrToStringAnsi(buffer);
NativeMethods.WTSFreeMemory(buffer);
}
}

if (user.Name.Length == 0)
{
return null;
}

return user;
}
}

关于c# - 捕获所有用户的 Windows 用户 session 切换事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com