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 :

Ajouter un login + Mot de passe dans une fenetre [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut Ajouter un login + Mot de passe dans une fenetre
    Bonjour,

    Il me semble que pour ajouter un login et un mot de passe sur une fenetre
    d'accès il doit y avoir mieux que :

    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
    While lPopupHandle = 0
             DoEvents
             lPopupHandle = FindWindowEx(0, 0&, "#32770", "Nom de ma fenetre")
                Wend
     
                hwnd = FindWindowEx(0, 0&, "#32770", "Nom de ma fenetre")
                hwnd_button = FindWindowEx(hwnd, 0, "Button", "OK")
     
                Application.wait Now + TimeValue("00:00:02")
     
                SetActiveWindow hwnd ' prend la main sur la fenêtre
     
     
        SendKeys "login"
        SendKeys "{TAB}"
        SendKeys "mdp"
        SendKeys "{enter}"
     
                Application.wait Now + TimeValue("00:00:02")
     
     
    SendKeys "{NUMLOCK}", True
     
     
    SendMessage hwnd_button, BM_CLICK, ByVal CLng(1), ByVal CLng(0) ' click sur le bouton
    La fenetre d'accès s'ouvre, je trouve bien son handle et celui du bouton "ok"
    qui lui clique correctement mais je n'arrive pas à mettre mon login et mdp...

    J'avais l'idée de coller une commande sendkeys mais celle-ci ne fonctionne pas??

    Merci d'avance pour vos réponses.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonjour

    regarde plutot du coté de "application.inputbox"

    au plaisir

    allez on y va

    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
     
    Dim monlogin
        Dim moncode
        monlogin = Application.InputBox("Enter Votre Login", "LOGIN", "----------")
        If monlmogin = "patrick" Then
            ' demande le code si le login est bon
            GoTo codico
        ElseIf monlogin <> "patrick" Then MsgBox "perdu ca n'est pas le bon login"
            'sort de la sub si c'est pas bon
            Exit Sub
        End If
     
    codico:
        moncode = Application.InputBox("Enter Votre code", "CODE", "XXXXXXXX")
        If moncode = "123456789" Then
     
            'action a faire si c'est bon
            MsgBox "coucou c'est le bon code "
        ElseIf moncode <> "123456789" Then
            'action a faire si c'est pas bon
            MsgBox "perdu"
        End If
    au plaisir

  3. #3
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut
    je vais essayer ta méthode demain mais je mets une réserve sur
    l'application du "inputbox" dans une une fenêtre style "code d'administrateur".
    Ma fenêtre c'est par exemple pour l'accès à un sharpoint de mon boulot.

    Merci de ton aide, je te tiens au courant.

    Lenovo49

    Bonjour,

    Effectivement, ce n'est pas ce genre de fentre que je cherche à completer mais plutôt une fenêtre administrateur du style:
    Images attachées Images attachées  

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    dans ce cas la je crois que tu va devoir passer par un userform

    et créer toi même ta fenêtre

    effectivement ma version propose deux fenêtres un pour le login et un pour le code pas très esthetique mais bon c'est fonctionnel

    je vais essayer ta version pour voir un peu ce que ça donne

    bien qu'elle me semble incomplète


    au plaisir

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour

    dans ce cas la je crois que tu va devoir passer par un userform

    et créer toi même ta fenêtre

    effectivement ma version propose deux fenêtres un pour le login et un pour le code pas très esthetique mais bon c'est fonctionnel

    je vais essayer ta version pour voir un peu ce que ça donne

    bien qu'elle me semble incomplète


    au plaisir
    Re, Patrick ... relit la question ...lenovo49 ne veut pas créer une fenêtre login/Mot de passe mais il veut saisir son login et son mot de passe dans une fenêtre sharepoint existante ...

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir bill

    effectivement tu a raison

    je constate que dans sa macro il capte le handle de sa fenetre mais en aucun cas il en prend le focus

    peut être la fonction " showwindow" ferait la différence et en plus te la mettrai en avant plan

    dans ton cas ça sera la constante 5 je crois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Declare Function ShowWindow Lib "user32" Alias "ShowWindow" ( _
                     ByVal hwnd As Long, _
                     ByVal nCmdShow As Long) As Long
    les constantes qui vont avec

    SW_HIDE 0 Cache la fenêtre et en active une autre.
    SW_MAXIMIZE 3 Agrandit la fenêtre.
    SW_MINIMIZE 6 Réduit la fenêtre et active la prochaine (dans l'ordre des tâches windows).
    SW_RESTORE 9 Active et affiche la fenêtre à sa taille et position initiales.
    SW_SHOW 5 Active et affiche la fenêtre.
    SW_SHOWMAXIMIZED 3 Active et agrandit la fenêtre.
    SW_SHOWMINIMIZED 2 Active et réduit la fenêtre.
    SW_SHOWNA 8 Identique à SW_SHOW sauf que la fenêtre n'est pas activée.

    donc

    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
     
    Declare Function ShowWindow Lib "user32" Alias "ShowWindow" ( _
                     ByVal hwnd As Long, _
                     ByVal nCmdShow As Long) As Long 
     
    sub machin_chose()
     
    While lPopupHandle = 0
             DoEvents
             lPopupHandle = FindWindowEx(0, 0&, "#32770", "Nom de ma fenetre")
                Wend
     
                hwnd = FindWindowEx(0, 0&, "#32770", "Nom de ma fenetre")
                hwnd_button = FindWindowEx(hwnd, 0, "Button", "OK")
     
                Application.wait Now + TimeValue("00:00:02")
     
                '
    showwindow hwnd, 5
    'SetActiveWindow hwnd ' prend la main sur la fenêtre
     
     
        SendKeys "login"
        SendKeys "{TAB}"
        SendKeys "mdp"
        SendKeys "{enter}"
     
                Application.wait Now + TimeValue("00:00:02")
     
     
    SendKeys "{NUMLOCK}", True
     
     
    SendMessage hwnd_button, BM_CLICK, ByVal CLng(1), ByVal CLng(0) ' click sur le bouton 
     
    end sub




    mille excuses pour les ratés je suis au bord de l'avc en ce moment

    au plaisir

  7. #7
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Bonjour,

    Merci de vos réponses, mais je capte bien le focus de ma fenêtre avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetActiveWindow hwnd ' prend la main sur la fenêtre
    Je reformule ma question autrement:
    Mon code fonctionne avec la méthode Sendkeys, le login et le mdp rentre dans les bonnes cases et je valide mon donc formulaire.

    Donc, je voulais savoir si à la place du "Sendkeys" il existe une autre méthode
    un peu plus pro afin de rentrer mes codes?

    La méthode actuelle me semble peu fiable et me pose d'autres soucis dans ma procédure.

    Merci de ton intéressement et garde la forme

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonjour

    il doit y avoir un moyen de capter le handle du control text de la fenetre

    et y metre par macro le login et le mot de passe

    mais ca deviens plus complexe il faudrait voir si avec les apis on ne peut pas le faire


    au plaisir

    bonjour
    ton problème est intéressant dans le sens ou il faut trouver les noms des éléments de ta fenêtre

    les deux contrôle texte ou tu tape tes données
    et le bouton ok' celui ci je crois que tu l'a trouvé

    et ensuite avec le handle des control

    un setwindowtext ferait peut etre l'affaire


    fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" ( _
                     ByVal hwnd As Long, _
                     ByVal lpString As String) As Long
    je cherche je cherche
    Edit:

    et voila la fonction pour trouver le handle des controls dans ta fenetre
    combiner a setwindowtext apres peut marcher
    a voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Lon

    au plaisir

  9. #9
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut
    Merci pour tes recherches, effectivement ta piste me semble exploitable reste
    à adapter un bout code qui va bien.

    J'ai commencé à farfouiller mais le sujet est vaste.
    J'ai trouvé un bout de code à retravailler, c'est pour ouvrir une base Note:

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Option Explicit
    ' We need this to get the handle of main password window:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                    (ByVal lpClassName As String, ByVal lpWindowName As String) _
                    As Long
     
    ' Function to know if window's class is what we need:
    Private Declare Function GetClassName Lib "user32" _
        Alias "GetClassNameA" _
       (ByVal hwnd As Long, _
        ByVal lpClassName As String, _
        ByVal nMaxCount As Long) As Long
     
    ' Enumerates all child windows from a given "Father" window:
    Public Declare Function EnumChildWindows Lib "user32" _
      (ByVal hWndParent As Long, _
       ByVal lpEnumFunc As Long, _
       ByVal lParam As Long) As Long
     
    ' Send windows messages to a given one:
    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
     
    ' To know which text is inside a given window:
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
                    (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) _
                     As Long
     
    ' Program begins here:
    Sub Main()
    Dim ret As Long
    ' Searching window of Lotus Notes Password Dialog box
    ' Replace caption with your own
    ret = FindWindow(vbNullString, "Nom de la fenetre")
     
    ' if found, continue else terminate (some fails...>(
    If ret <> 0 Then
        Call EnumChildWindows(ret, AddressOf EnumChildProc, &H0)
    End If
    End Sub
     
    ' This function is a callback function to obtain child windows handles:
    ' It MUST be in a module!
    Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    'constants to send to OK button
    Const BM_SETSTATE = &HF3
    Const WM_LBUTTONDOWN = &H201
    Const WM_LBUTTONUP = &H202
     
    'const to set password text
    Const WM_SETTEXT = &HC
     
    'vars to hold class name and caption/text of
    'windows found
    Dim sClass As String
    Dim sTitle As String
    Dim l As Long
     
    'We need a buffer here
    sClass = Space$(255)
    sTitle = Space$(255)
     
    l = GetClassName(hwnd, sClass, 255)
    sClass = Left$(sClass, l)
    If sClass = "IRIS.password" Then
        '... we got handle to password's window
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "your_password_here" 'replace with a valid password
    End If
     
    'reset var value
    l = 0
     
    l = GetWindowText(hwnd, sTitle, 255)
    sTitle = Left$(sTitle, l)
    ' Since i have Notes in spanish, you must to change
    ' text to compare with
    If InStr(1, sTitle, "Aceptar", vbTextCompare) Then
        ' click the button...!
        Call SendMessage(hwnd, WM_LBUTTONDOWN, 0, ByVal 0&)
        Call SendMessage(hwnd, WM_LBUTTONUP, 0, ByVal 0&)
        Call SendMessage(hwnd, BM_SETSTATE, 1, ByVal 0&)
    End If
    '... done.
    EnumChildProc = 1
     
    End Function
    Je vois ca lundi au boulot car ici je n'ai pas de quoi faire des tests.

    Merci encore et évidemment j'ai pas oublier de voter!

    Bonjour patricktoulon,

    C'est bon j'ai pu tester ce matin et effectivement le code ci dessus et facile à mettre en place et surtout très efficace!!
    Enfin une méthode propre....

    Encore merci pour cette piste!

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    il n'y a pas de quoi le forum est la pour ça


    finalement tout réside la si je comprend bien car c'est ce qu'il te manquait dans ta version précédente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const WM_SETTEXT = &HC'pour le control text de la fenetre
    j'aimerais bien voir ton code

    moi j'apprend en même temps et je n'avais jamais utiliser la fonction pour les élément enfant d'une fenêtre

    a mon avis dans ton cas ça doit être plus simple que l'exemple que tu a trouvé

    au plaisir de lire ton code

  11. #11
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Bonsoir,

    Là pour le test j'ai utilisé ma clé 3g qui ouvre une fênetre pour le code PIN.
    J'utilise le nom de ma fenetre d'acces au PIN dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ret = FindWindow(vbNullString, "Nom de la fenetre")
    j'ai juste pris le code ci_dessus et j'ai fais un point d'arrêt dans le code en dessous de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If sClass = "IRIS.password" Then
        '... we got handle to password's window
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "your_password_here" 'replace with a valid password
    End If
    Ensuite à chaque blocage sur le point d'arrêt je lis le qui me donne le nom de la zone texte (Un peu comme un espion).
    Une fois le bon nom trouvé je remplace par le nom de ma zone texte et place mon mot de passe dans:
    .

    Et voilà, fini la commande sendkey ....

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir


    oui ca j'avais compris

    mais comment identifie tu le control pour le "login" visiblement tu n'a que le passworld

    sans doute de la meme maniere mais dans la macro que tu a modifier a ton besoins tu t'occupe que du mot de passe

    c'est ma question


    au plaisir

  13. #13
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Re bonsoir,

    Pour le login je n'est pas pu tester mais bon vu que me liste les champs de zone texte je pouvoir les distinguer et de faire un code du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If sClass = "nom champs texte1" Then
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "login" 
    End If 
    If sClass = "nom champs texte2" Then
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "mot de passe" 
    End If
    Je test lundi et je te tiens au courant!!

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonsoir
    c'est exactement la ou je voulais en venir

    je suis impatient de connaître le résultat

    a lundi

    je n'ai pas de possibilité d'essayer alors je vais simuler une fenêtre de ce type

    et voir si l'on peut boucler comme ça sur les contrôles

    si on y arrive voila une contribution intéressante car c'est pas la première fois que ce sujet sort

    au plaisir

    rebonsoir .

    Afin d'envisager une macro générique si cela fonctionne il va falloir sélectionner les éléments par leur index ou quelque chose comme ça0

    car dans ta conclusion tu remplaces les noms par ceux que tu connais donc la macro ne fonctionnera que pour ton application (la fenêtre que tu veux instruire).

    Or il serait intéressant de déterminer le bon contrôle sans connaître son nom.

    Il y a plusieurs solutions possibles

    Soit par leur index (en espérant que l'ordre de la construction ne soit pas anarchique

    soit une autre solution plus probante en testant l'emplacement des contrôles

    (le login est plus haut que le mot de passe;ou plus a gauche que )voir faire un test pour tester la quelle des solution prendre dynamiquement

    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if login.top<mdp then 
    'solution plus haut que 
    else 
    solution plus a gauche que 
    end if
    j'attends ta version finale pour la transformer en générique


    au plaisir

  15. #15
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut Ma réponse
    Bonjour,

    Ce matin j'ai donc fais un petit test et je pense qu'il est possible de le rendre générique non pas par "sclass" mais par "sTitle ":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    I= GetWindowText(hwnd, sTitle, 255) 
    sTitle = Left$(sTitle, l) 
    If sTitle  = "&Nom d'utlislisateur"  Then 'Login
    ici si le nom est trouvé donc mettre le code à sa droite
    mais il faut déterminer le placement exact de la zone texte 
    
    End If
    Quand à moi je me suis facilité les choses en listant les objects de la fenêtre enfant et ensuite en les indexants de façon à créer une double condition avant de déposer mon login et mon mdp!

    Je vais continuer à chercher de mon côté mais si tu trouves le code générique, je te laisse me tenir au courant.

    Pour moi avec ma méthode cela fonctionne parfaitement même après une serie de test complets!

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    donc si je comprend bien

    1°tu liste les éléments
    2° tu les indexe
    3° tu te sert de leur index pour savoir si c'est le login ou le mdp

    est ce bien ca

    dans ce cas la comment fait tu pour savoir le quel est le login ou le mdp

    mon idée était de déterminer leur position car a 95% le login est au dessus de mdp

    et pour le reste il est a gauche du mdp

    j'aimerais voir ta macro pour bien comprendre


    au plaisir

  17. #17
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Bonsoir,

    Pour lister et indexer, j'ai été obligé de le faire un par un en ajoutant du text à chaque contrôle pour déterminer sa place (Tps = moins de 1mn pour lister la fenetre).

    C'est sur que si les objets sont normés alors le code ci-dessous devient générique mais si tu peux faire un essai??


    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Option Explicit 
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
                    (ByVal lpClassName As String, ByVal lpWindowName As String) _ 
                    As Long 
     
    Private Declare Function GetClassName Lib "user32" _ 
        Alias "GetClassNameA" _ 
       (ByVal hwnd As Long, _ 
        ByVal lpClassName As String, _ 
        ByVal nMaxCount As Long) As Long 
     
    Public Declare Function EnumChildWindows Lib "user32" _ 
      (ByVal hWndParent As Long, _ 
       ByVal lpEnumFunc As Long, _ 
       ByVal lparam As Long) 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 
     
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _ 
                    (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) _ 
                     As Long 
    Public mdp_boucle, login_boucle As Long 
     
    Sub Administrateur() 
    Dim ret As Long 
    ret = FindWindow(vbNullString, "ma fenetre") 
    mdp_boucle = 1 
    login_boucle = 1 
    If ret <> 0 Then 
        Call EnumChildWindows(ret, AddressOf EnumChildProc, &H0) 
    End If 
    End Sub 
     
    Public Function EnumChildProc(ByVal hwnd As Long, ByVal lparam As Long) As Long 
     
    Const BM_SETSTATE = &HF3 
    Const WM_LBUTTONDOWN = &H201 
    Const WM_LBUTTONUP = &H202 
     
    Const WM_SETTEXT = &HC 
     
    Dim sClass As String 
    Dim sTitle As String 
    Dim l As Long 
     
    sClass = Space$(255) 
    sTitle = Space$(255) 
     
     
    l = GetClassName(hwnd, sClass, 255) 
    sClass = Left$(sClass, l) 
    If sClass = "ComboBoxEx32" And login_boucle = 4 Then 
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "login" 
    End If 
     
    l = GetClassName(hwnd, sClass, 255) 
    sClass = Left$(sClass, l) 
    If sClass = "Edit" And mdp_boucle = 8 Then 
        SendMessage hwnd, WM_SETTEXT, 0&, ByVal "mdp" 
    End If 
     
    l = 0 'ici faire point d'arrêt pour lister les objets
    mdp_boucle = mdp_boucle + 1 
    login_boucle = login_boucle + 1 
     
     
    l = GetWindowText(hwnd, sTitle, 255) 
    sTitle = Left$(sTitle, l) 
    If InStr(1, sTitle, "OK", vbTextCompare) Then 
        Call SendMessage(hwnd, WM_LBUTTONDOWN, 0, ByVal 0&) 
        Call SendMessage(hwnd, WM_LBUTTONUP, 0, ByVal 0&) 
        Call SendMessage(hwnd, BM_SETSTATE, 1, ByVal 0&) 
    End If 
     
    EnumChildProc = 1 
     
    End Function
    Si tu trouves penses à me faire un retour!!

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    ca s'avere plus difficile que prevu

    car il faudrais que je prenne en compte plus de class
    en effet
    ca n'est pas forcement des "ComboBoxEx32"
    dur dur

    et je ne connais pas tout les type(leur nom communs)



    au plaisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [UI] Insertion login et mot de passe dans une BDD
    Par rclaisse dans le forum jQuery
    Réponses: 6
    Dernier message: 19/06/2013, 10h13
  2. Envoi login et mot de passe dans une URL
    Par xssoum dans le forum Android
    Réponses: 2
    Dernier message: 17/03/2011, 15h14
  3. login et mot de passe dans une url
    Par turican2 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 25/09/2008, 22h04
  4. Formulaire Login/mot de passe - Conserver une variable
    Par GraphiKa dans le forum Access
    Réponses: 3
    Dernier message: 30/09/2005, 15h29
  5. sécuriser le mot de passe dans une page asp
    Par Redouane dans le forum ASP
    Réponses: 2
    Dernier message: 10/03/2004, 21h16

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