Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2011, 15h46   #1
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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.
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 17h50   #2
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
bonjour

regarde plutot du coté de "application.inputbox"

au plaisir

allez on y va

Code :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2011, 08h10   #3
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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
Type de fichier : jpg Capturer.JPG (12,8 Ko, 17 affichages)
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 19h59   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 20h35   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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 ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 20h58   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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

Citation:
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 :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 10h05   #7
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

Bonjour,

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

Code :
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
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 14h17   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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 :
1
2
3
 
 
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Lon

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/11/2011, 12h01   #9
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 19h45   #10
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 20h41   #11
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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 :
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 ....
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/11/2011, 21h09   #12
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 21h38   #13
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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!!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 22h39   #14
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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 :
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 19h03   #15
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 10h57   #16
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 18h51   #17
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
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 :
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!!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 14h09   #18
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
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
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h49.


 
 
 
 
Partenaires

Hébergement Web