Waldo the man...

VB Code:
  1. Option Explicit
  2.  
  3. Public Declare Function SystemParametersInfoSS _
  4.         Lib "user32" Alias "SystemParametersInfoA" _
  5.         (ByVal uAction As Long, ByVal uParam As Long, _
  6.         ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
  7.        
  8. Public Declare Function SwitchDesktop _
  9.         Lib "user32" _
  10.         (ByVal hDesktop As Long) As Boolean
  11.        
  12. Public Declare Function OpenDesktop _
  13.         Lib "user32" Alias "OpenDesktopA" _
  14.         (ByVal lpszDesktop As String, _
  15.         ByVal dwFlags As Long, _
  16.         ByVal fInherit As Boolean, _
  17.         ByVal dwDesiredAccess As Long) As Long
  18.  
  19. Public Const DESKTOP_CREATEMENU = &H4&
  20. Public Const DESKTOP_CREATEWINDOW = &H2&
  21. Public Const DESKTOP_ENUMERATE = &H40&
  22. Public Const DESKTOP_HOOKCONTROL = &H8&
  23. Public Const DESKTOP_JOURNALPLAYBACK = &H20&
  24. Public Const DESKTOP_JOURNALRECORD = &H10&
  25. Public Const DESKTOP_READOBJECTS = &H1&
  26. Public Const DESKTOP_WRITEOBJECTS = &H80&
  27. Public Const DESKTOP_SWITCHDESKTOP = &H100&
  28. Public Const SPI_SCREENSAVERRUNNING = 114
  29.  
  30.        
  31. Public Function SSRunning() As Boolean
  32.  
  33.     Dim lRetVal         As Long
  34.  
  35.     Dim lRunning        As Long
  36.  
  37.     On Error Resume Next
  38.  
  39.     lRetVal = SystemParametersInfoSS(SPI_SCREENSAVERRUNNING, 0&, lRunning, 0&)
  40.  
  41.     lRetVal = SystemParametersInfoSS(SPI_SCREENSAVERRUNNING, lRunning, 0&, 0&)
  42.  
  43.     If lRunning <> 0 Then
  44.  
  45.         SSRunning = True
  46.  
  47.     End If
  48.  
  49. End Function
  50.  
  51. Public Function DesktopLocked() As Boolean
  52.  
  53.     Dim lngHWnd As Long
  54.  
  55.     Dim lngRtn As Long
  56.  
  57.     Dim lngErr As Long
  58.    
  59.     DesktopLocked = False
  60.    
  61.     lngHWnd = OpenDesktop("Default", 0, False, DESKTOP_SWITCHDESKTOP)
  62.        
  63.     If lngHWnd = 0 Then
  64.  
  65.         Debug.Print "Error with OpenDesktop: " & Err.LastDllError
  66.  
  67.         Else
  68.  
  69.         lngRtn = SwitchDesktop(hDesktop:=lngHWnd)
  70.  
  71.         lngErr = Err.LastDllError
  72.  
  73.         If lngRtn = 0 Then
  74.  
  75.             If lngErr = 0 Then
  76.  
  77.                 Debug.Print "Desktop is locked: "
  78.  
  79.                 DesktopLocked = True
  80.  
  81.             Else
  82.  
  83.                 Debug.Print "Error with SwitchDesktop: " & _
  84. Err.LastDllError
  85.  
  86.             End If
  87.  
  88.         End If
  89.  
  90.     End If
  91.  
  92. End Function