是否可以从.NET中的全局键盘钩子中确定当前用户

时间:2008-09-23 07:12:20

标签: .net windows

我想创建一个键盘和鼠标挂钩,它将作为Windows服务启动。我希望监控全天使用该系统的各种用户的活动。即,哪些用户活动

是否可以确定哪个用户将收到这些事件? (该服务将作为单独的用户运行,因此getCurrentUser不合适)

4 个答案:

答案 0 :(得分:1)

不,Environment.UserName不起作用 - 在输入接收器的上下文中不调用钩子过程。

实际上,我认为这是不可能的 - 如果使用.NET,你无疑会使用的_LL钩子是低级别的钩子。在我看来,在Windows确定哪个桌面/应用程序将接收该事件之前,它们已经执行得很好。我可能错了 - 我自己从未使用过_LL钩子。

答案 1 :(得分:0)

@TcKs - 嗯,那么快速用户切换呢?

答案 2 :(得分:0)

另一种方式:

WTSGetActiveConsoleSessionId功能允许您获取活动会话的ID。混凝土:

  

WTSGetActiveConsoleSessionId函数检索当前连接到物理控制台的终端服务会话。物理控制台是显示器,键盘和鼠标。请注意,没有必要运行终端服务才能使此功能成功。

然后您可以使用WTSQueryUserToken来设置用户的令牌,然后您应该能够通过令牌获取有关用户的信息。

此功能来自终端服务,但文档说:

  

请注意,没有必要运行终端服务才能使此功能成功。

所以我认为,这可能是方式。

答案 3 :(得分:-2)

我不知道这些钩子 - 他们是否从远程桌面键盘接收事件?如果他们只获得本地键盘,那么我认为你需要找到WinSta0的所有者。