1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Extraction de donnée d'une application

Discussion dans 'Windev' créé par akzo81, Sept 15, 2022.

  1. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bonjour à tous,

    J'ai une fenêtre d'une application quelconque qui procède des champs remplis par des valeurs, jusque la rien d'anormal. Mais est il possible qu'a partir d'une seconde application sous windev de pouvoir extraire le contenu des champs de la première application.

    Cordialement
     
    Tags:
  2. Wikeos

    Wikeos Active Member

    Inscrit:
    Fev 27, 2020
    Messages:
    172
    J'aime reçus:
    170
    Bonjour,

    Oui tu as plusieurs possibilités:

    - Base de données HFSQL Client/Serveur avec tes 2 applications connecté à la même base.
    - Ecrire dans un fichier .ini avec les fonctions IniLit() et récupérer les valeurs avec IniEcrit().
    - Ecrire dans un fichier .txt avec les fonctions fOuvre(), fEcrit(), fChargeTexte(), etc...

    Aller plus loin, créer ton API que tu pourras interroger par la suite.
    Et bien d'autres encore.
     
  3. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Merci pour la réponse.
    Mais pour faire chacune des méthodes il faut le coder en amont sur la première application. Ma question était plus pour la création d une seconde application pour extraire les données de la première qui n a aucun lien hyperfile ou init ou fichier .
    Cordialement
     
  4. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    509
    J'aime reçus:
    739
    Bonjour

    Sur ce post : Communication simple entre 2 application windev

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Il y a deux autres sollutions :

    1- Les fonctions VersPressepapier() et PressePapier()
    2- Utiliser la fonction : fMemOuvre

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bonne journée.
     
  5. Wikeos

    Wikeos Active Member

    Inscrit:
    Fev 27, 2020
    Messages:
    172
    J'aime reçus:
    170
    La pour le coup, c'est faisable mais beaucoup moins fiable, voici ce que tu peux tout de même faire:

    - Utiliser l'OCR en windev 27 et lire des zones de texte.
    - Tu peux aussi tricher en prenant le focus (grâce au handle) sur ta première application, faire des tab (ToucheEnvoie()) et faire des copier coller (ToucheEnvoi()).

    C'est clairement pas les meilleurs solutions.
     
  6. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bonjour.
    Merci pour vos idées je vais m orienté vers les handles.Voir comme Spy++
    Cordialement
     
  7. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bonjour a tous,
    Avec API("User32","GetWindowTextA",hwnd,&lpString,255) j'arriver à lire la valeur d'un champs text du programme ou je lance cette fonction,

    Mais avec les fonctions GetWindowText je ne peut pas récupérer le texte dans un contrôle qui est la propriété d'un autre programme.

    J'aimerais savoir quelles sont les fonctions qui me permettrais de lire et d'écrire le texte d'un contrôle d'un autre programme en cours (je connais son handle).

    Info pour simuler un clic sur un bouton j'utilise la fonction PostMessage('Numero handle du champs',245,null,null).

    Cordialement
     
  8. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Salut,
    il te faut le handle du champ :
    AppelDLL32("user32", "EnumChildWindows" , nHandleFen, &EnumChilds, Null)
     
  9. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bonjour, merci pour votre aide
    Je viens de tenter la nouvelle méthode mais la encore échec j'ai fait des imprimes écran pour mieux comprendre
    merci encore
     

    Fichiers attachés:

  10. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Je pense que le retour ne fonctionne pas car il n'y a pas assez de place, c'est peut-être à cause de l'unicode ????
    Pour valider ça, utilise la ligne suivante avec le max du string à 255 :
    nRet32 = AppelDLL32("User32", "GetWindowTextA", nHwnd32, &sTitre, 255)
     
  11. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    bonjour, merci pour vos efforts mais désolé le résultat est le même .
     
  12. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Oui, GetWindowTextA ne fonctionne plus sur les édit des appli externe :

    "This function cannot retrieve the text of an edit control in another application."

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Il faut utiliser le send message :
    SI sClass = "Edit" ALORS
    nRet32 = SendMessage(hwnd32, 0x000D, 255, &sTitre2) // WM_GETTEXT = 0x000D;
    FIN

    J'ai utilisé sTitre2, car là c'est vraiment de l'UNICODE (de mémoire),
    sinon tu n'auras que le premier caractère dans sTitre.
     
  13. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bon je viens de faire un test cela ne retourne pas encore la valeur 0
    mais avec 0x000E je recupere le nombre de caractère qui sont dans le champs Edit donc pour moi déjà du mieux cela prouve que je suis dans les bons Handles
     
  14. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    sTitre2 est une chaîne UNICODE sur 255
     
  15. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    oui j'ai même essayer avec ansi asciiz et unicode j'ai toujours le même résultat. par contre il me semble avoir vu au cours de mes recherches que les champs texte seraient des zones mémoires.
     
  16. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Bonjour,
    je me retourne vers vous une nouvelle fois encore.
    J'ai donc réussi a avancer un peu plus sur la lecture d'une donnée d'une autre application donc si cela peu aider d'autre personne j'en parle ici.
    La commande est bien SendMessage(hwnd32, 0x000D, 255, &sTitre2) mais &sTitre2 doit avoir la valeur d'un pointeur mémoire du Handle (exemple 0x0018e4b4).
    Le résultat est par exemple "60<0x0018e4b4> ensuite il faut juste extraire la chaine avant le <.
    Existe t'il une fonction API qui me retournerai cette valeur car elle semble être volatile (pas toujours la même) . Pour info cette valeur je l'ai trouver avec Spy++.
    Apres il me restera a trouver comment écrire dans un champ Edit.
    Cordialement bon dev a tous
     
    #16 akzo81, Oct 13, 2022
    Dernière édition: Oct 13, 2022
  17. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Je ne sais pas où est ton problème, j’ai donc fait un test rapide, cela fonctionnent en lecture et en modification, regarde les différences :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    Gemini1961, WX1331 et suenodesign aiment ça.
  18. akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Super, la ça fonctionne comme il faut Je vais voir dans mon code là où j'ai mon problème Merci beaucoup
     

Partager cette page

Chargement...