Доброго времени суток!
Для подтверждения пользовательских прав использую функцию ввода пароля доступа в InputBox. Для этого использую следующий скрипт:
После перехода с Вин7 х32 на Вин10 х64, при попытке выполнения Public Function InputBoxDK, получаю сообщение об ошибке типа: Type Mismatch. Ругается на строку: hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID), а именно на ..., AddressOf NewProc, ...
Подскажите пожалуйста, как это побороть?
Заранее огромное спасибо всем!
Для подтверждения пользовательских прав использую функцию ввода пароля доступа в InputBox. Для этого использую следующий скрипт:
| Код |
|---|
Private Const HC_ACTION = 0
Private hHook As Long
Private Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5
Public Const EM_SETPASSWORDCHAR = &HCC
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe 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 PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare PtrSafe 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 PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare PtrSafe 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 PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long
Public Function vbInputBox(Prompt As String, Optional Title As String, Optional Default As String, Optional Xpos As Single, Optional Ypos As Single, Optional Helpfile As String, Optional Context As Long) As String
hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, Application.Hinstance, 0)
vbInputBox = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context)
End Function
Private Function CBTProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hwndEditControl As Long
If lMsg = HCBT_ACTIVATE Then
hwndEditControl = FindWindowEx(wParam, 0, "Edit", "")
If hwndEditControl Then SendMessage hwndEditControl, EM_SETPASSWORDCHAR, Asc("*"), 0
UnhookWindowsHookEx hHook
End If
CBTProc = 0
End Function
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
RetVal = GetClassName(wParam, strClassName, lngBuffer)
If Left$(strClassName, RetVal) = "#32770" Then SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
End If
CallNextHookEx hHook, lngCode, wParam, lParam
End Function
Public Function InputBoxDK(Prompt As String, Optional Title As String, Optional Default As String, Optional Xpos As Long, Optional Ypos As Long, Optional Helpfile As String, Optional Context As Long) As String
Dim lngModHwnd As Long, lngThreadID As Long
On Error GoTo ExitProperly
lngThreadID = GetCurrentThreadId
lngModHwnd = GetModuleHandle(vbNullString)
hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
If Xpos Then
InputBoxDK = InputBox(Prompt, Title, Default, Xpos, Ypos, Helpfile, Context)
Else
InputBoxDK = InputBox(Prompt, Title, Default, , , Helpfile, Context)
End If
ExitProperly: UnhookWindowsHookEx hHook
End Function
|
Подскажите пожалуйста, как это побороть?
Заранее огромное спасибо всем!