Salve, ho bisogno di aiuto. Sto sviluppando un software che, tra le varie funzioni, dovrebbe consentire di decriptare gli asterischi utilizzati per nascondere le password. In particolare, il programma dovrebbe essere in grado di tradurre in caratteri normali gli asterischi di tutte le password visibili sullo schermo.
Il perché di questa funzione è presto detto: a chi, come il sottoscritto, capita di salvare la password di accesso a Internet per non doverla riscrivere a ogni collegamento viene da chiedersi cosa succederebbe se, a un certo punto, la si dimenticasse. Basterebbe deselezionare la casella "Salva Password" per far sparire definitivamente gli asterischi e perdere la possibilità di collegarsi. Da qui è nata la necessità di sviluppare una funzione che fosse di aiuto in questo senso.
La funzione di cui sopra si ottiene inserendo il seguente codice in un modulo:
codice:
Option Explicit
Public Declare Function EnumChildWindows Lib "User32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function EnumWindows Lib "User32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Declare Function ShowWindow Lib "User32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Const EM_GETPASSWORDCHAR = &HD2
Public Const EM_SETPASSWORDCHAR = &HCC
Public Const EM_SETMODIFY = &HB9
Public Const SW_HIDE = 0
Public Const SW_SHOW = 5
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
EnumChildWindows hwnd, AddressOf EnumWindowsProc2, 1
EnumWindowsProc = True
End Function
Public Function EnumWindowsProc2(ByVal hwnd As Long, ByVal lParam As Long) As Long
If SendMessage(hwnd, EM_GETPASSWORDCHAR, 0, 1) Then
UpdateWindow hwnd
End If
EnumWindowsProc2 = True
End Function
Public Sub UpdateWindow(hwnd As Long)
SendMessage hwnd, EM_SETPASSWORDCHAR, 0, 1
SendMessage hwnd, EM_SETMODIFY, True, 1
ShowWindow hwnd, SW_HIDE
ShowWindow hwnd, SW_SHOW
End Sub
Public Function UnmaskPasswords()
EnumWindows AddressOf EnumWindowsProc, 1
End Function
edit by xegallo: usa i tag
Questa funzione sembra funzionare perfettamente sotto Windows 95, 98 e Millennium. Per "smascherare" tutti gli asterischi presenti sullo schermo (anche appartenenti ad applicativi diversi), è sufficiente richiamare UnmaskPasswords.
Il problema sorge quando si utilizza il programma sotto Windows XP, dal momento che i caratteri usati per celare le password non sono i classici asterischi bensì i "pallini" tipicamente usati negli elenchi puntati. In tal caso, la funzione descritta non produce alcun risultato.
Qualcuno sa quali modifiche bisogna apportare al codice di sopra per rendere la function funzionante anche sotto Windows XP?
Grazie in anticipo.
Pasquale Esposito
Perugia