jascam / CodePlexFoo

0 stars 0 forks source link

Check if the desktop is locked... #151

Open jascam opened 7 years ago

jascam commented 7 years ago

Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch); void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e) { if (e.Reason == SessionSwitchReason.SessionLock) {
//I left my desk } else if (e.Reason == SessionSwitchReason.SessionUnlock) {
//I returned to my desk } }

    There is no reliable API for detected it from MSDN.   http://msdn.microsoft.com/en-us/library/aa376875(VS.85).aspx   This function has the same result as pressing Ctrl+Alt+Del and clicking Lock Workstation. To unlock the workstation, the user must log in. There is no function you can call to determine whether the workstation is locked. To receive notification when the user logs in, use the WTSRegisterSessionNotification function to receive WM_WTSSESSION_CHANGE messages. You can use session notifications to track the desktop state so you know whether it is possible to interact with the user.     If your process is running under user mode, you may call OpenInputDesktop() to detect secure desktops if it fails. Note this may not what you wanted because it fails for UAC popup/Locked desktop. There is no API for differentiate between Locked Desktop and UAC popup.

Migrated CodePlex Work Item Details

CodePlex Work Item ID: '7032' Vote count: '1'

jascam commented 7 years ago

I think , registering such process as a scheduled task may allow it to run even when user is not logged in and it will also take administrative privileges skipping the UAC popup. Check if it solves your problem. There is also a Logon Trigger in Scheduled Tasks. Give it a try.

This comment was posted by FAIZ99 on 11/2/2014