Solved

API to get the screen saver password?

Posted on 1998-10-01
3
194 Views
Last Modified: 2010-04-30
Is there an API to retrieve the password of the screen saver?

Pls show how..
thanks
0
Comment
Question by:fury
  • 2
3 Comments
 
LVL 14

Accepted Solution

by:
waty earned 100 total points
ID: 1437766
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"
   Else
      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
   Else
      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

0
 

Author Comment

by:fury
ID: 1437767
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...
0
 
LVL 14

Expert Comment

by:waty
ID: 1437768
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.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now