tags:

views:

1872

answers:

3

Hi all, The need arose, in our product, to determine how long the current user has been logged on to Windows (specifically, Vista). It seems there is no straight forward API function for this and I couldn't find anything relevant with WMI (although I'm no expert with WMI, so I might have missed something).

Any ideas?

+1  A: 

In WMI do: "select * from Win32_Session" there you'll have "StartTime" value.

Hope that helps.

Michał Piaskowski
+3  A: 

For people not familiar with WMI (like me), here are some links:

And here's example querying Win32_Session from VBS:

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

It alerts 6 sessions for my personal computer, perhaps you can filter by LogonType to only list the real ("interactive") users. I couldn't see how you can select the session of the "current user".

[edit] and here's a result from Google to your problem: http://forum.sysinternals.com/forum_posts.asp?TID=3755

Nickolay
A: 

Using WMI, the Win32Session is a great start. As well, it should be pointed out that if you're on a network you can use Win32_NetworkLoginProfile to get all sorts of info.

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

Other bits of info you can collect include the user name, last logoff, as well as various profile related stuff.

Matt Hanson