• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 231
  • Last Modified:

API to get the screen saver password?

Is there an API to retrieve the password of the screen saver?

Pls show how..
  • 2
1 Solution
No, but here are some functions to verify if the given password is correct.

' #VBIDEUtils#************************************************************
' * Programmer Name  : Waty Thierry
' * Web Site         : www.geocities.com/ResearchTriangle/6311/
' * E-Mail           : waty.thierry@usa.net
' * Date             : 1/10/98
' * Time             : 10:05
' * Module Name      : Password_Module
' * Module Filename  : Password.bas
' **********************************************************************
' * Comments         : Change/Verify the logon password
' *
' *
' **********************************************************************

Option Explicit

' *** Get the O/S Version
Private Declare Function GetVersionEx& Lib "kernel32" Alias "GetVersionExA" (lpStruct As OsVersionInfo)
Private OsVers As OsVersionInfo
Private Type OsVersionInfo
   dwVersionInfoSize As Long
   dwMajorVersion As Long
   dwMinorVersion As Long
   dwBuildNumber As Long
   dwPlatform As Long
   szCSDVersion As String * 128
End Type
Private CurrOS As String

' *** NT password setup info
Private Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
Private Declare Function NetGetDCName Lib "NETAPI32.DLL" (ServerName As Byte, DomainName As Byte, DCName As Long) As Long
Private Declare Function PtrToStr Lib "kernel32" Alias "lstrcpyW" (RetVal As Byte, ByVal Ptr As Long) As Long
Private Declare Function NetAPIBufferFree Lib "NETAPI32.DLL" Alias "NetApiBufferFree" (ByVal Ptr As Long) As Long

' *** Password stuff
Private Declare Function PwdChangePassword& Lib "mpr" Alias "PwdChangePasswordA" (ByVal lpcRegkeyname$, ByVal hWnd&, ByVal uiReserved1&, ByVal uiReserved2&)
Private Declare Function WNetVerifyPassword Lib "mpr.dll" Alias "WNetVerifyPasswordA" (ByVal lpszPassword As String, ByRef pfMatch As Long) As Long
Private Declare Function NetUserChangePassword Lib "NETAPI32.DLL" (DomainName As Byte, Username As Byte, OldPassword As Byte, NewPassword As Byte) As Long

Public Sub Change_ScreenSaverPassword95(frm As Form)
   Dim pwlong As Long
   If GetVersion32() <> "95" Then
      Exit Sub
   End If
   pwlong = PwdChangePassword("SCRSAVE", frm.hWnd, 0, 0)
End Sub

Public Sub Change_LogonPassword95(frm As Form)
   Dim pwlong As Long
   If GetVersion32() <> "95" Then
      MsgBox "Can't do this call on " & CurrOS
      Exit Sub
   End If
   pwlong = PwdChangePassword(vbNullString, frm.hWnd, 0, 0)
End Sub

Public Function GetVersion32() As String
   ' Call to get the 32 Bit O/S ID. Returned values are either "95" or "NT" or "Unknown"
   ' Example - MyString = GetVersion32
   OsVers.dwVersionInfoSize = 148&
   GetVersionEx OsVers
   If OsVers.dwPlatform = 1& Then
      GetVersion32 = "95"
   ElseIf OsVers.dwPlatform = 2& Then
      GetVersion32 = "NT"
      GetVersion32 = "Unknown"
   End If
End Function

Public Function Verify_LogonPassword95(sPWD As String) As Boolean
   Dim pwlong, Res As Long
   If CurrOS <> "95" Then
      MsgBox "Can't do this call on " & CurrOS
      Exit Function
   End If
   ' *** User must type current password in text box for this to work
   pwlong = WNetVerifyPassword(sPWD, Res)
   If Res <> 0 Then
      Verify_LogonPassword95 = True
      Verify_LogonPassword95 = False
   End If

End Function

Private Sub Change_LogonPasswordNT(sOldPWD As String, sNewPWD As String)
   Dim pwlong, Res As Long
   Dim DC, User, S1 As String
   Dim bPDCName() As Byte
   Dim bUserName() As Byte
   Dim bOldPW() As Byte
   Dim bNewPW() As Byte
   If CurrOS <> "NT" Then
      MsgBox "Can't do this call on " & CurrOS
      Exit Sub
   End If
   ' *** Get the primary domain controller name
   DC = GetPrimaryDCName("", "")
   DC = Left(DC, (InStr(1, DC, Chr(0), vbBinaryCompare) - 1))
   ' *** Get the current user name
   S1 = Space(512)
   WNetGetUser vbNullString, S1, Len(S1)
   User = Left(S1, (InStr(1, S1, Chr(0), vbBinaryCompare) - 1))
   bPDCName = DC & vbNullChar
   bUserName = User & vbNullChar
   bOldPW = sOldPWD & vbNullChar
   bNewPW = sNewPWD & vbNullChar
   pwlong = NetUserChangePassword(bPDCName(0), bUserName(0), bOldPW(0), bNewPW(0))

End Sub

Private Function GetPrimaryDCName(ByVal MName As String, ByVal DName As String) As String
   Dim DCName As String, DCNPtr As Long
   Dim DNArray() As Byte
   Dim MNArray() As Byte
   Dim DCNArray(100) As Byte
   Dim Result As Long
   MNArray = MName & vbNullChar
   DNArray = DName & vbNullChar
   Result = NetGetDCName(MNArray(0), DNArray(0), DCNPtr)
   If Result <> 0 Then
      MsgBox "Error: " & Result
      Exit Function
   End If
   Result = PtrToStr(DCNArray(0), DCNPtr)
   Result = NetAPIBufferFree(DCNPtr)
   DCName = DCNArray()
   GetPrimaryDCName = DCName
End Function

furyAuthor Commented:
Long answer...thanks...but I just want to know the password....
so that if users forget the password of my screensaver.......I can remind them...actually..the boss requested that...
The password of a screen saver es basically the same as the Logon password of Windows (except if you have written the
SSaver and stored the pwd).

If the use has lost his password, he needs to change the pwd of windows.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now