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
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.
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
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.
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.
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
Salut, il te faut le handle du champ : AppelDLL32("user32", "EnumChildWindows" , nHandleFen, &EnumChilds, Null)
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
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)
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.
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
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.
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
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!
Super, la ça fonctionne comme il faut Je vais voir dans mon code là où j'ai mon problème Merci beaucoup