none
Código não funciona com outros computadores/tipo de sistemas RRS feed

  • Pergunta

  • Boa noite a todos,

    Criei um código para inserir uma senha para bloquear/desbloquear a planilha e parte deste código possuí uma função que peguei na internet que transcreve os dados inseridos numa inputbox em asteriscos, mascarando a senha. Porém, em outros computadores, está ocorrendo o seguinte erro:

    O código foi elaborado em um Excel 32bits e agora está dando essa incompatibilidade (apenas na função que transcreve os dados inseridos em asteriscos).

    Segue as funções:

    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
    
     
    
    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
    
    
    '// Make it public = avail to ALL Modules
    
    '// Lets simulate the VBA Input 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
    
    
        '// Lets handle any Errors JIC! due to HookProc> App hang!
    
        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
    

    Então amigos, o que faço?! É urgente esta questão!

    Att,

    jraf

    segunda-feira, 10 de junho de 2013 22:08

Respostas