我想创建一个键盘和鼠标挂钩,它将作为Windows服务启动。我希望监控全天使用该系统的各种用户的活动。即,哪些用户活动。
是否可以确定哪个用户将收到这些事件? (该服务将作为单独的用户运行,因此getCurrentUser不合适)
答案 0 :(得分:1)
不,Environment.UserName不起作用 - 在输入接收器的上下文中不调用钩子过程。
实际上,我认为这是不可能的 - 如果使用.NET,你无疑会使用的_LL钩子是低级别的钩子。在我看来,在Windows确定哪个桌面/应用程序将接收该事件之前,它们已经执行得很好。我可能错了 - 我自己从未使用过_LL钩子。
答案 1 :(得分:0)
@TcKs - 嗯,那么快速用户切换呢?
答案 2 :(得分:0)
另一种方式:
WTSGetActiveConsoleSessionId功能允许您获取活动会话的ID。混凝土:
WTSGetActiveConsoleSessionId函数检索当前连接到物理控制台的终端服务会话。物理控制台是显示器,键盘和鼠标。请注意,没有必要运行终端服务才能使此功能成功。
然后您可以使用WTSQueryUserToken来设置用户的令牌,然后您应该能够通过令牌获取有关用户的信息。
此功能来自终端服务,但文档说:
请注意,没有必要运行终端服务才能使此功能成功。
所以我认为,这可能是方式。
答案 3 :(得分:-2)
我不知道这些钩子 - 他们是否从远程桌面键盘接收事件?如果他们只获得本地键盘,那么我认为你需要找到WinSta0的所有者。