确定用户登录Windows的时间

时间:2020-03-05 18:40:08  来源:igfitidea点击:

在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,而且我找不到与WMI相关的任何内容(尽管我不是WMI的专家,所以我可能会漏掉一些东西)。

有任何想法吗?

解决方案

回答

在WMI中执行:"从Win32_Session中选择*"
在那里,我们将拥有" StartTime"值。

希望能有所帮助。

回答

对于不熟悉WMI(例如我)的人,这里有一些链接:

  • 有关使用多种语言使用WMI的MSDN页面:http://msdn.microsoft.com/zh-cn/library/aa393964(VS.85).aspx
  • 有关Win32_Session的参考:http://msdn.microsoft.com/zh-cn/library/aa394422(VS.85).aspx,但Win32_session中的对象的类型为Win32_LogonSession(http://msdn.microsoft.com/zh_cn) -us / library / aa394189(VS.85).aspx),它具有更多有趣的属性。
  • WMI资源管理器-一种可用于轻松运行查询(如发布的Michal)的工具。

这是从VBS查询Win32_Session的示例:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" _
    & strComputer & "\root\cimv2")
Set sessions = objWMIService.ExecQuery _
   ("select * from Win32_Session")

For Each objSession in sessions
   Wscript.Echo objSession.StartTime
Next

它会为我的个人计算机发出6个会话警报,也许我们可​​以按LogonType筛选仅列出实际("交互")用户。我看不到如何选择"当前用户"的会话。

[编辑],这是Google对问题的处理结果:http://forum.sysinternals.com/forum_posts.asp?TID=3755

回答

使用WMI,Win32Session是一个很好的开始。同样应该指出的是,如果我们在网络上,则可以使用Win32_NetworkLoginProfile来获取各种信息。

Set logins = objWMIService.ExecQuery _
   ("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
   Wscript.Echo objSession.LastLogon
Next

我们可以收集的其他信息包括用户名,上次注销以及与配置文件相关的各种内容。