|
本帖最后由 nothingwmm 于 2011-2-18 09:51 编辑
- Option Explicit
- '////////////////////////////////////////////////////////////////////
- 'Password masked inputbox
- 'Allows you to hide characters entered in a VBA Inputbox.
- '
- 'Code written by Daniel Klann
- '////////////////////////////////////////////////////////////////////
- 'API functions to be used
- Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
- ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
- Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
- Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
- (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _
- ByVal dwThreadId As Long) As Long
- Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
- Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _
- (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _
- ByVal wParam As Long, ByVal lParam As Long) As Long
- Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
- ByVal lpClassName As String, _
- ByVal nMaxCount As Long) As Long
- Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
- 'Constants to be used in our API functions
- Private Const EM_SETPASSWORDCHAR = &HCC
- Private Const WH_CBT = 5
- Private Const HCBT_ACTIVATE = 5
- Private Const HC_ACTION = 0
- Private hHook As Long
- Sub HiddenPassword()
- ' Pages 356-358
- If InputBoxDK("Please enter password", "Password Required") <> "password" Then
- MsgBox "Sorry, that was not a correct password."
- Else
- MsgBox "Correct Password! Come on in."
- End If
- End Sub
- Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Dim RetVal
- Dim strClassName As String, lngBuffer As Long
- If lngCode < HC_ACTION Then
- NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
- Exit Function
- End If
- strClassName = String$(256, " ")
- lngBuffer = 255
- If lngCode = HCBT_ACTIVATE Then 'A window has been activated
- RetVal = GetClassName(wParam, strClassName, lngBuffer)
- If Left$(strClassName, RetVal) = "#32770" Then 'Class name of the Inputbox
- 'This changes the edit control so that it display the password character *.
- 'You can change the Asc("*") as you please.
- SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
- End If
- End If
- 'This line will ensure that any other hooks that may be in place are
- 'called correctly.
- CallNextHookEx hHook, lngCode, wParam, lParam
- End Function
- Public Function InputBoxDK(Prompt, Optional Title, Optional Default, Optional XPos, _
- Optional YPos, Optional HelpFile, Optional Context) As String
- Dim lngModHwnd As Long, lngThreadID As Long
- lngThreadID = GetCurrentThreadId
- lngModHwnd = GetModuleHandle(vbNullString)
- hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
- On Error Resume Next
- InputBoxDK = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
- UnhookWindowsHookEx hHook
- End Function
复制代码 |
评分
-
查看全部评分
|