Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 14514|回复: 15

[分享] 星号隐藏输入内容的密码输入

[复制链接]
发表于 2011-2-18 09:51 | 显示全部楼层 |阅读模式
本帖最后由 nothingwmm 于 2011-2-18 09:51 编辑

QQ截图未命名.jpg

  1. Option Explicit
  2. '////////////////////////////////////////////////////////////////////
  3. 'Password masked inputbox
  4. 'Allows you to hide characters entered in a VBA Inputbox.
  5. '
  6. 'Code written by Daniel Klann
  7. '////////////////////////////////////////////////////////////////////

  8. 'API functions to be used
  9. Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
  10.                                                       ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
  11. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  12. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
  13.                                           (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _
  14.                                           ByVal dwThreadId As Long) As Long
  15. Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  16. Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _
  17.                                             (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _
  18.                                             ByVal wParam As Long, ByVal lParam As Long) As Long
  19. Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
  20.                                                                           ByVal lpClassName As String, _
  21.                                                                           ByVal nMaxCount As Long) As Long
  22. Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
  23. 'Constants to be used in our API functions
  24. Private Const EM_SETPASSWORDCHAR = &HCC
  25. Private Const WH_CBT = 5
  26. Private Const HCBT_ACTIVATE = 5
  27. Private Const HC_ACTION = 0
  28. Private hHook As Long
  29. Sub HiddenPassword()
  30.     ' Pages 356-358
  31.     If InputBoxDK("Please enter password", "Password Required") <> "password" Then
  32.         MsgBox "Sorry, that was not a correct password."
  33.     Else
  34.         MsgBox "Correct Password!  Come on in."
  35.     End If
  36. End Sub
  37. Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  38.     Dim RetVal
  39.     Dim strClassName As String, lngBuffer As Long
  40.     If lngCode < HC_ACTION Then
  41.         NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
  42.         Exit Function
  43.     End If
  44.     strClassName = String$(256, " ")
  45.     lngBuffer = 255
  46.     If lngCode = HCBT_ACTIVATE Then    'A window has been activated
  47.         RetVal = GetClassName(wParam, strClassName, lngBuffer)
  48.         If Left$(strClassName, RetVal) = "#32770" Then  'Class name of the Inputbox
  49.             'This changes the edit control so that it display the password character *.
  50.             'You can change the Asc("*") as you please.
  51.             SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
  52.         End If
  53.     End If
  54.     'This line will ensure that any other hooks that may be in place are
  55.     'called correctly.
  56.     CallNextHookEx hHook, lngCode, wParam, lParam
  57. End Function
  58. Public Function InputBoxDK(Prompt, Optional Title, Optional Default, Optional XPos, _
  59.                         Optional YPos, Optional HelpFile, Optional Context) As String
  60.     Dim lngModHwnd As Long, lngThreadID As Long
  61.     lngThreadID = GetCurrentThreadId
  62.     lngModHwnd = GetModuleHandle(vbNullString)
  63.     hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
  64.     On Error Resume Next
  65.     InputBoxDK = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
  66.     UnhookWindowsHookEx hHook
  67. End Function
复制代码

星号隐藏输入的密码 2010 版.rar

17.34 KB, 下载次数: 16

售价: 3 个金币  [记录]

星号隐藏输入的密码 2003 版.rar

13.36 KB, 下载次数: 17

售价: 3 个金币  [记录]

评分

参与人数 1 +3 收起 理由
YANG6815475 + 3 赞一个!

查看全部评分

 楼主| 发表于 2011-2-18 10:26 | 显示全部楼层
无爱无恨 发表于 2011-2-18 10:09
楼主白设了金币购买,俺去点“复制代码”,就省了3BB啊,不过还是要感谢下楼主。

呵呵 ,算你聪明,我知道!
如果你调试不出来,或者懒的复制,就用金币购买吧,我的所有代码都是全部给出来,你完全可以选择买或者不买,如果你买了就是给我的鼓励,如果不买,给我添个评分也是可以的,如果你什么也不做,我也不介意。所以很自由的哦,大家想怎么弄都可以,我很开放的。我不设置门槛的。代码完全公开!

评分

参与人数 3 +14 收起 理由
ppp710715 + 9 赞一个!
西安专家 + 3 学习
无爱无恨 + 2 这句话好,给你经验,比BB好用的

查看全部评分

回复

使用道具 举报

发表于 2011-2-18 11:22 | 显示全部楼层
另一种方法
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  2.             (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  4.             (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  5. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  6.             (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  7. 'timeSetEvent函数请参考:http://msdn2.microsoft.com/en-us/library/ms713423.ASPx
  8. Private Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, _
  9.            ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
  10. Private Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
  11. Private Const EM_SETPASSWORDCHAR = &HCC
  12. Dim lTimeID     As Long          'Timer ID
  13. Const pswdInputBoxTitle = "密码输入"     '输入密码的对话框标题
  14. 'TimeProc callback 函数请参考:http://msdn2.microsoft.com/en-us/library/ms713420.aspx
  15. Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
  16.     ByVal dw1 As Long, ByVal dw2 As Long)
  17.     Dim hwd As Long         '输入密码的对话框句柄
  18.     'VBA InputBox对话框之Class Name是 "#32770",
  19.     '标题为 "pswdInputBox", 这是在InputBox函数的Title引述中自订的
  20.     '请注意Application.InputBox方法所出现的对话框Class Name是 "bosa_sdm_XL9"
  21.     hwd = FindWindow("#32770", pswdInputBoxTitle)
  22.     If hwd <> 0 Then        '若对话框存在
  23.         '取得输入的文字框句柄, 该文字框的Class Name是"Edit", 无标题,
  24.         '而Application.InputBox方法所出现的对话框之文字框的Class Name是"EDTBX"
  25.         hwd = FindWindowEx(hwd, 0, "Edit", vbNullString)
  26.         '设定密码字符为 "*", "*"的ASCII码为42
  27.         SendMessage hwd, EM_SETPASSWORDCHAR, 42, 0
  28.         '设定完成, 取消定时器
  29.         timeKillEvent lTimeID
  30.     End If
  31. End Sub
  32. '自定义函数pswdInputBox, 是一个输入密码使用的InputBox, 输入的内容都以 "*" 显示.
  33. Function pswdInputBox() As Variant
  34.     '启动一个特定的Timer事件, 0.01秒延迟, 0.05秒看一次
  35.     lTimeID = timeSetEvent(10, 50, AddressOf TimeProc, 1, 1)
  36.     '显示InputBox对话框
  37.     pswdInputBox = InputBox(Prompt:="请输入编辑密码", Title:=pswdInputBoxTitle)
  38. End Function
  39. Sub Main()
  40.     If pswdInputBox <> 123456 Then
  41.         MsgBox "密码错误!"
  42.     Else
  43.         MsgBox "密码正确!"
  44.     End If
  45. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
西安专家 + 3 学习

查看全部评分

回复

使用道具 举报

发表于 2011-2-18 11:35 | 显示全部楼层
向高手学习
回复

使用道具 举报

发表于 2012-1-25 00:20 | 显示全部楼层
谢谢了,辛苦你了,终于找到了
回复

使用道具 举报

发表于 2012-1-25 16:35 | 显示全部楼层
所以很自由的哦,大家想怎么弄都可以,我很开放的。我不设置门槛的。代码完全公开!

很欣赏楼主的性格!值得学习!也应加分。
.
回复

使用道具 举报

发表于 2012-1-25 20:58 | 显示全部楼层
不知你的代码有什么用?!Excel安全性密码输入也是星※※号,看不见数字的!

回复

使用道具 举报

发表于 2012-1-29 14:17 | 显示全部楼层
    不知楼主的东西有什么用!?怎么用?
    先下载复制,不知何用?又花金币下载来看,也不知有什么用?!
   
   建议有这类东西的各位在发帖之前,检查一下有无错误,或者用例子检验一下对否?!经检查无误后再发表出来,以免浪费大家的时间和精力!
回复

使用道具 举报

发表于 2012-2-16 22:25 | 显示全部楼层
的顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

使用道具 举报

发表于 2013-1-14 17:17 | 显示全部楼层
无分!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-15 18:45 , Processed in 0.377622 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表