Querying a Windows box to see if the currently logged on user is idle - ideally using WMI
Solution 1
If you're willing to hack it and look for a screensaver to detmine inactivity you might as well use powershell to see if the session is inactive (i.e. the computer is locked):
QUERY SESSION /server:MachineName UserName
it uses the terminal services interface to see if a user is attached to a session. This works because in modern versions of windows all local users are treated as being console sessions of the computer. The two status of interest are:
- Active: Logged in and using
- Disconnected: logged in but the screen is locked or user is detached
As it's based on the old qwinsta functionality rather than being fully OO you'll need to do some string manipulation if you want a boolean out of it (i.e. -contains "Active").
For an accurate figure (and what screensavers themselves are generally driven by) look at the LastInputInfo() win32 API call but you need to run it in the user's context which is usually a deal breaker if you need remote monitoring. Here's the MSDN article though: http://msdn.microsoft.com/en-us/library/ms646302(VS.85).aspx
Solution 2
No is the simple answer.
I have in the past used WMI to list the running processes and looked for the screen saver. If the screen saver is running they are inactive in one sense, though you still can't tell if they've left an app running. You can check things like CPU and/or disk actvity, but it's hard to get a firm answer from these.
JR
Mike McClelland
Updated on September 17, 2022Comments
-
Mike McClelland over 1 year
I want to be able to query whether the currently logged in user is idle at their PC - i.e. their PC believes they are 'inactive'... The problem is there are so many ways this could be done. Is there a universal: "THIS COMPUTER IS IDLE/INACTIVE" - I'm thinking about using whatever measure the power subsystem uses...
My thought is to use WMI/Powershell but I could also use a .NET call in C# - I'd just rather not!
Sorry to be a bit vague on this and I'm more than happy for anybody to edit my question into something more meaningful!
Mike
-
Mike McClelland almost 15 yearsJohn, I thought that was probably the answer! Hopefully, somebody else has found a solution that is workable.
-
drescherjm over 7 yearsI get access is denied doing this to query if my user name is active on a windows 7 machine that I am logged in but disconnected (from a remote session).