- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 87
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-4-11
               
|
2#
發表於 2011-12-3 21:43
| 只看該作者
本帖最後由 Hsieh 於 2011-12-3 21:57 編輯
回復 1# user999
http://blog.xuite.net/crdotlin/excel/13554651
'一般模組 Module1 程式碼- Option Explicit
- 'API宣告
- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
- (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
- (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
- (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- 'timeSetEvent函數請參考:http://msdn2.microsoft.com/en-us/library/ms713423.aspx
- Private Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, _
- ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
- Private Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
- Private Const EM_SETPASSWORDCHAR = &HCC
- Dim lTimeID As Long 'Timer ID
- Const pswdInputBoxTitle = "pswdInputBox" '輸入密碼的對話框標題
-
- 'TimeProc callback 函數請參考:http://msdn2.microsoft.com/en-us/library/ms713420.aspx
- 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 '輸入密碼的對話框句柄
- 'VBA InputBox對話框之Class Name是 "#32770",
- '標題為 "pswdInputBox", 這是在InputBox函數的Title引述中自訂的
- '請注意Application.InputBox方法所出現的對話框Class Name是 "bosa_sdm_XL9"
- hwd = FindWindow("#32770", pswdInputBoxTitle)
- If hwd <> 0 Then '若對話框存在
- '取得輸入的文字框句柄, 該文字框的Class Name是"Edit", 無標題,
- '而Application.InputBox方法所出現的對話框之文字框的Class Name是"EDTBX"
- hwd = FindWindowEx(hwd, 0, "Edit", vbNullString)
- '設定密碼字元為 "*", "*"的ASCII碼為42
- SendMessage hwd, EM_SETPASSWORDCHAR, 42, 0
- '設定完成, 取消計時器
- timeKillEvent lTimeID
- End If
- End Sub
- '自定義函數pswdInputBox, 是一個輸入密碼使用的InputBox, 輸入的內容都以 "*" 顯示.
- Function pswdInputBox() As Variant
- '啟動一個特定的Timer事件, 0.01秒延遲, 0.05秒看一次
- lTimeID = timeSetEvent(10, 50, AddressOf TimeProc, 1, 1)
- '顯示InputBox對話框
- pswdInputBox = InputBox(Prompt:="請輸入編輯密碼", Title:=pswdInputBoxTitle)
- End Function
複製代碼 '表單模組Userform1程式碼
表單上設置一個標籤Label1、及1個按鈕CommandButton1
- Private Sub CommandButton1_Click()
- Label1.Caption = ""
- If pswdInputBox <> 123456 Then
- '密碼不正確, 顯示訊息
- Label1.Caption = "對不起,密碼錯誤,你無編輯權限!"
- Else
- Label1.Caption = "歡迎使用本系統"
- End If
- End Sub
複製代碼 |
|