1-1使用对话框输入密码
使用InputBox 函数显示的对话框输入密码简单方便,但有个明显的缺陷,就是输入过程中不能用占位符显示密码,不够安全。借助API函数可以在输入密码过程中以占位符“*”号来显示密码,如下面的代码所示。
Public Declare Function FindWindo w Lib "user32" Alias "FindWind owA" (ByVal lpClassNa me As String, ByVal lpWindowN ame As String) As Long
Public Declare Function FindWindo wEx Lib "user32" Alias "FindWind owExA" (ByVal hWnd1As Long, ByVal hWnd2As Long, ByVal
lpsz1As String, ByVal
lpsz2As String) As Long
Public Declare Function SendMessa ge Lib "user32" Alias "SendMess ageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)As Long
Public Declare Function timeSetEv ent Lib "winmm.dl l"(ByVal uDelay As Long, ByVal uResoluti on As Long, ByVal lpFunctio n As Long, ByVal dwUser As Long, ByVal uFlags As Long)As Long
Public Declare Function timeKillE vent Lib "winmm.dl l"(ByVal uID As Long)As Long
Public Declare Function GetTickCo unt Lib "kernel32 "()As Long
Public Const
EM_SETPAS SWORDCHAR = &HCC
Public lTimeID As Long
Sub TimeProc( ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
Dim hwd As Long
hwd = FindWindo w("#32770 ","密码")
If hwd<>0 Then
hwd= FindWindo wEx(hwd, 0, "edit", vbNullStr ing) SendMessa ge hwd, EM_SETPAS SWORDCHAR , 42, 0
timeKillE vent lTimeID
End If
End Sub
Sub Password( )
Dim Password As
Variant
lTimeID= timeSetEv ent(10, 0, AddressOf TimeProc, 1, 1) Password =
InputBox( "请输入密码:","密码")
If Password = "123456" Then MsgBox"密码正确!"
Else
MsgBox"密码错误!"
End If
End Sub 代码解析:Password 过程使用InputBox 函数显示一个输入密码的对话框,并且以占位符“*”号显示输入的密码。第1行到第8行代码,API函数声明。
第9行到第
17行代
码,TimeProc
过程是timeSetEv
ent的回调
函数,获
得对话框
句柄。
第18行到
第27行代
码,Password
过程显示
一个提示
用户输入
密码的对
话框。
运行Password
过程将显
示一个密
码输入
框,输入
的密码以
占位符“*
”号代
替,如图
75?2所示
。
图 75?2密码输入框