IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Compréhension de code avec API


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut Compréhension de code avec API
    Bonjour à tous,

    Je m'adresse à vous en espèrent trouver de charmants membres de DVP pour m'aider à comprendre un code.
    J'ai eu besoin récemment d'utiliser un InputBox de type mot de passe (donc avec caractères masqués pendant la saisie)
    Ne sachant pas vraiment m'y prendre et ne voulant pas réinventer la roue (surtout si c'est pour faire une roue carré avec mes connaissance ) j'ai trouvé un code sur le net http://www.office-loesung.de/ftopic74191_0_0_asc.php

    Ce dernier fonctionne très bien mais j'ai un peu de mal à le comprendre.
    En cherchant je suis tombé sur ce tuto de Anthony DE DECKER qui m'a déjà beaucoup aider dans ma compréhension du code mais c'est encore un peu flou.

    Si un expert de passage peut m'aider encore à avancer dans la compréhension du code j'en serais ravi.

    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Explicit
        '-----------------------------+
        '   API de gestion des Hook   |
        '-----------------------------+
    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 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
    '--------------------------------------------------------------------------------------------------
     
        '----------------------------------------------+
        '   API Envoie de message avec controles spe   |
        '----------------------------------------------+
    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
    '--------------------------------------------------------------------------------------------------
     
        '----------------------------------------+
        '   API  Donne la classe de la fenêtre   |
        '----------------------------------------+
    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 GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
     
    Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
     
    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$, lngBuffer&
            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
             End If
        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&, lngThreadID&
            lngThreadID = GetCurrentThreadId
            lngModHwnd = GetModuleHandle(vbNullString)
            hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
                InputBoxDK = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
            UnhookWindowsHookEx hHook
    End Function
    Merci d'avance et bonne journée à tous.

    PS : Une source des API disponibles avec Windows ainsi que leurs descriptions me serais aussi utile (j'ai un peu de mal à en trouver)
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  2. #2
    Invité
    Invité(e)

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,
    pourquoi utiliser le Api?
    http://www.developpez.net/forums/d15...l/#post8394591

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Un début piste (à améliorer encore bien sûr !) avec un TextBox sur un UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim MotDePasse As String
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        MotDePasse = MotDePasse & Chr(KeyAscii)
        KeyAscii = 42
     
    End Sub
     
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     
        If KeyCode = 8 Or KeyCode = 46 Then MotDePasse = Left(MotDePasse, Len(TextBox1))
     
    End Sub

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/02/2013, 14h00
  2. variable avec accolades(compréhension du code)
    Par stephane543 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2009, 00h38
  3. récupérer code html avec API mozilla (ou gecko)
    Par samitriani dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 12/12/2008, 15h45
  4. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 17h40
  5. [UML] génération de code avec omondo.uml
    Par RENAULT dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/10/2003, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo