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

Windows Discussion :

Impossible d'acceder au Text (GetWindowText ou SendMessage)


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut Impossible d'acceder au Text (GetWindowText ou SendMessage)
    J'essai de recuperer et de modifier ensuite l'URL dans internet Explorer.
    pour cela jutilise l'api win32 :
    je trouve les Handles jusqu'au composant Edit, fils de Combobox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        hwnd = FindWindow("IEFrame", vbNullString)
        Wait (3)
        
        hwnd = FindWindowEx(hwnd, 0, "WorkerW", vbNullString)
        hwnd = FindWindowEx(hwnd, 0, "ReBarWindow32", vbNullString)
        hwnd = FindWindowEx(hwnd, 0, "ComboBoxEx32", vbNullString)
        hwnd = FindWindowEx(hwnd, 0, "ComboBox", vbNullString)
        hwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString)
        lSuccess = GetWindowText(hwnd, buffer, 50)
        MsgBox (buffer)
    tous les handles sont corrects, jai verifier avec GetClassName, ya pas de souci par la.
    mon msgbox est cense me donner l'URL mais ca ne maffiche rien...
    qqu'un sait pkoi?
    merci

  2. #2
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    Citation Envoyé par MSDN
    The GetWindowText function copies the text... However, GetWindowText cannot retrieve the text of a control in another application.
    il faut passer par les hook, t'as de bon exemple sur www.codeproject.com
    C'est le devoir de chaque homme de rendre au monde au moins autant qu'il en a reçu -- Albert Einstein

    Mon blog: http://blackhorus.blogspot.com

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    bah pourtant j ai trouve des tonnes de sources sur le net, qui font comme moi, et on dirait que ca marche pr eux...
    J ai essaye avec la methode SendMessage (WM_GETTEXTLENGTH et WM_GETTEXT) mais pareil ca me donne rien, et GETTEXTLENGTH me renvoi 0 ...)

    et c'est quoi les hook :

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    [quote="VoLc0m"]bah pourtant j ai trouve des tonnes de sources sur le net, qui font comme moi, et on dirait que ca marche pr eux...
    J ai essaye avec la methode SendMessage (WM_GETTEXTLENGTH et WM_GETTEXT) mais pareil ca me donne rien, et GETTEXTLENGTH me renvoi 0 ...)

    et la jvois pas en quoi je devrais utiliser les hooks :

  5. #5
    Membre habitué Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par VoLc0m
    et la jvois pas en quoi je devrais utiliser les hooks :
    Pour faire de l'injection de code dans l'autre processus.

    Mais ça n'a aucun interêt ici, WM_GETTEXTLENGTH et WM_GETTEXT fonctionnent avec un autre process

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    oui, mais ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lSuccess = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0)
    me retourne 0

  7. #7
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    Citation Envoyé par VoLc0m
    oui, mais ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lSuccess = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0)
    me retourne 0
    vérifie que le membre hWnd est bien valide
    C'est le devoir de chaque homme de rendre au monde au moins autant qu'il en a reçu -- Albert Einstein

    Mon blog: http://blackhorus.blogspot.com

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    j'ai verifie, c'est ca le pire
    J'ai utilise le logiciel WinDowse et celui ci recupere exactement les meme handle que moi!
    ya un truc qui me chagrine, je sais pas si tu connais ce logiciel, mais dans la vue TREE, sur le composant EDIT en question, il n'arrive pas a m'afficher le TEXT, alors que dans la vue WINDOW, il m'affiche le TEXT...

  9. #9
    Membre habitué Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Points : 145
    Points
    145
    Par défaut
    C'est pas un champ password à tout hasard ?

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    non c'est le contenu de la barre d'adresse d'internet explorer, la ou on entre les adresses

  11. #11
    Membre habitué Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Points : 145
    Points
    145
    Par défaut
    Attention, la barre d'adresse est un edit dans une combo. Le handle de la fenêtre c'est celui de l'edit ?

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    non le handle c'est celui de l'Edit

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Il suffit de lire la doc de GetWindowText:
    To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
    Si tu veux faire naviguer IE à une adresse précise, fait le proprement via l'automation.
    http://www.codeproject.com/shell/iehelper.asp

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    J'ai lu la doc, et j'ai teste avec WM_GETTEXT (je l'ai meme ecrit dans mes precedents posts) et cela n'a pas marche non plus...
    J'ai quand meme voulu tenter avec GetWindowText etant donne que j'ai trouve des sources sur differents sites, qui utilisent cette methode...mais ca marche pas pour moi on dirait...

    Et je code en VB (ac les API) et ton lien me donne que la methode avec des class C++

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    Merci Aurelien!
    en fait je me suis acharne sur le WM_GETTEXT et j'ai enfin compri ce qui ne marchait pas... j'avais mal utilise la fonction SendMessage() avec les parametres specifiques aux message WM_GETTEXT... et ca marche
    par contre(parce que quand tout va bien c'est pu drole), mon SETTEXT ne marche pas ( pour specifier l'URL dans IE)
    j'ai regarde la doc msdn, car mon sendmessage(..,WM_SETTEXT,.) me renvoi 0 : ce qui veu dire : pas assez d'espace dans l'EDIT de IE pour copier ma chaine !
    la jcomprends pa!

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Dois y avoir une erreur. Mais je reviens à la charge avec mon automation. Là je serais pas étonné que tu arrives à changer le texte de l'URL affichée, mais que la page ne soit pas chargée. En plus VB c'est le langage roi de l'automation.
    http://support.microsoft.com/kb/176792/en-us
    http://msdn.microsoft.com/library/en-us/dninvbs/html/usinginternetexplorerobjects.asp
    Ensuite tu appelles Navigate. Ca doit tenir en 4/5 lignes, c'est fiable et propre.

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    ui ton automation ca m'a l'air bien, mais je veux emuler une navigation comme ci kkun entrai du text ds la barre...( c un logiciel de test d'applications)
    je crois avoir decouvert le problem, et c un truc con, mais kjai tjs pas trouve :
    msdn a di : SendMessage(hWnd,WM_SETTEXT,0,null-terminated string)

    et moi ske jarrive pas a faire c'est le NULL-TERMINATED string je crois !

  18. #18
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Je peux pas t'aider en VB. Mais là tu ne vas pas émuler une saisie de l'utilisateur. Pour cela il faudrait plutôt envoyer un message de copier-coller.

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    bon de tte maniere jvais pas tout recommencer alors que c'est la derniere fonction du module lol...

    sur mon handle, le message GETTEXT marche niquel, mais pas le message SETTEXT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Const WM_SETTEXT = &HC
        Dim buffer As String
        buffer = "http://www.google.fr" & Chr(0)
    
        lSuccess = SendMessage(hWnd, WM_SETTEXT, 0, ByVal buffer)
    enfin ya pas 36 facons dutiliser le SendMessage hein?! jcomprends pas

    ah ui, de plus hThread me retourne pas le handle de ma fenetre IE : normal? hThread est un nombre a 3 ou 4 chiffres, jtrouve ca bizare..

  20. #20
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 61
    Points : 24
    Points
    24
    Par défaut
    Bon... jvais etre vulgaire, mais tanpis :
    je suis un gros con :
    j ai mis ma constante WM_SETTEXT en : PRIVATE dans un autre module !!!!!
    normal que ca marchai pas!!!!


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

Discussions similaires

  1. Impossible d'acceder au firewall windows
    Par Sunchaser dans le forum Sécurité
    Réponses: 9
    Dernier message: 08/03/2006, 16h25
  2. [MFC]Impossible de changer le texte d'un LABEL
    Par jlassira dans le forum MFC
    Réponses: 7
    Dernier message: 01/03/2006, 16h39
  3. Open LDAP - Impossible d'acceder en root
    Par Jack_le_Boulet dans le forum Réseau
    Réponses: 4
    Dernier message: 27/02/2006, 15h20
  4. impossible d'acceder
    Par sarastro dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 15/09/2005, 17h57
  5. Impossible d'accéder à ma partition FAT 32 sous Mandrake 10
    Par gibet_b dans le forum Administration système
    Réponses: 8
    Dernier message: 24/09/2004, 12h43

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