bonjour,
je peux savoir si visual c++ peux communiquer avec un autre logiciel, en fait c'est un logiciel de supervision est je veux récupérer les données pour pouvoir les modifier.
merci d'avance pour vos reponses.:king:
Version imprimable
bonjour,
je peux savoir si visual c++ peux communiquer avec un autre logiciel, en fait c'est un logiciel de supervision est je veux récupérer les données pour pouvoir les modifier.
merci d'avance pour vos reponses.:king:
tu veux créer un programme pour exploiter des données présentes dans un autre logiciel ?
en fait je dois creé une interface soft qui peux lire données d'un autre logiciel
le logiciel n'offre pas de système pour s'interfacer avec lui ? (fichiers xml, apis, etc ...)
donc tu pense que ce n'est pas possible de faire une interface avec visual c qui peux aller écrire des données dans ce logiciel
je pense que c'est pas la meilleure facon.
Sinon, oui, grace aux handles, tu peux aller récuperer le contenu d'interface d'autres logiciels si les champs sont élémentaires (textbox, static, edit, etc ...)
ca devient compliqué et c'est souvent de la bidouille.
donc tu n'as pas une autre solution pour pouvoir exploiter les données d'un autre logiciel et pouvoir les modifier
et c'est quoi un handles stp?
si, la solution serait d'utiliser findwindow, getwindowtext, etc ... pour localiser la fenetre, les controles et lire le contenu
c'est quoi un findwindow et getwindowtext, tu n 'aurais pas un exemple de programme qui utilise findwindow.
merci
fais une recherche sur le forum, il y en a plein
dans la faq visual C++ aussi
supposons que je connais l'adresse de stockage de l'autre logiciel, est ce que tu pense que je peux aller directement lire et changer les données avec visual C.
c'est quoi l'adresse de stockage ?
en fait je veux dire l'adresse ou l'autre logiciel stocke les variables que je dois modifier tu vois se que je veux dire ou pas?
tu parles d'une adresse en mémoire ?
oui
normalement, les zones de mémoires d'un processus sont protégées de la lecture d'autres. On peut y arriver plus ou moins grace à une injection de code, mais c'est un processus plutot compliqué.
Tu as abandonné la lecture directe depuis l'interface ?
ok d'acord. en fait je ne comprends pas trop comment utiliser findwindow, getwindowtext, etc. est ce que tu peux m'expliquer un peux ce que sa veux dire stp et comment sa marche stp.
merci beaucoup
FindWindows va te permettre de récuperer un handle de fenetre, ou de controle
un exemple :
ouvre la calculatrice de windows XP, rentre un nombre
et execute ca
ca va t'afficher la valeur du champ editCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 HWND h = FindWindow(TEXT("SciCalc"), NULL); if (h) { HWND hEdit = FindWindowEx(h, NULL, TEXT("Edit"), NULL); if (hEdit) { int len = (int)SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0); if (len) { TCHAR * text = new TCHAR[len + 1]; SendMessage(hEdit, WM_GETTEXT, len, (LPARAM)text); MessageBox(NULL, text, TEXT(""), 0); delete text; } } }
ya des erreurs quand j'exécute le programme:cry:
ok c bon sa marche:yaisse2:
et pour aller ecrire des donnés on fait comment?
tu utilises le messages WM_SETTEXT (s'il s'agit d'un edit toujours)
tu peux etre un peu plus claire stp merci
ben là, dans mon exemple, pour récuperer la valeur, tu as envoyé le message WM_GETTEXT
pour la mettre, utilise WM_SETTEXT
n'hésite pas à consulter l'aide http://msdn2.microsoft.com/en-us/library/ms632644.aspx
ok mais comment je fais pour envoyer une valeur précise sur l'afficheur de la calculatrice.
je t'avais tout expliqué pourtant, il suffisait de regarder la msdn :
Code:
1
2
3
4
5
6
7
8 HWND h = FindWindow(TEXT("SciCalc"), NULL); if (h) { HWND hEdit = FindWindowEx(h, NULL, TEXT("Edit"), NULL); if (hEdit) SendMessage(hEdit, WM_SETTEXT, NULL, (LPARAM)TEXT("1234")); }
ok merci:king:
comment je fais pour selectionner le logiciel que je veux controler moi. toi pour controler la calculatrice ta mis "SciCalc", et pour un autre logiciel on met quoi?
Sinon dans le logiciel que j'utilise il y a plusieurs variable comment je peux aller controller une variable précise?
merci d'avance
utilise l'utilitaire spy++ pour connaitre le nom des fenetres et des classes de fenetres.
Tu peux t'en servir aussi pour connaitre les ID des controles ou les types de controles
comment je fais pour utiliser l'utilitaire spy++, et sa consiste a quoi?
merci
ok c'est bon j'ai trouver, je voudrais juste savoir sur spy++ quand il y a class name et classe styles on fais comment?
merci
dans les outils de visual studio, tu as un outil qui s'appelle spy++
il te permet d'espionner les fenetres
tu peux donc retrouver les handles, les classes, etc ...
c'est ce que j'ai fait pour la calculette
essaie de regarder, si tu n'y arrives pas, je te ferai des copies d'écran
ok c'est bon j'ai trouver spy++, mais j'ai un petit probleme car pour changer la variable il faut cliquer sur la variable en question pour avoir une zone d'edition. donc on fait comment dans ce cas?
merci
j'ai rien compris :aie:
en fait je parle du logiciel ou je dois envoyer les données. Pour modifier une variable il faut cliquer sur la variable en question et ensuite on peux rentrer une valeur,c'est pas comme sur la calculette ou on a une zone d'edition(la ou on peut ecrire). La il faut que je fasse un clique
jespere que c'est claire la :cfou:
tu dois simuler un click sur le bouton ?
tu peux essayer en envoyant le message de click
et comment on fait pour envoyer un message de click?
merci bcp
tu récupères le handle du bouton, et tu fais (exemple pour la calculette, j'appui sur le bouton 8) :Code:
1
2
3
4
5
6
7
8
9
10 HWND h = FindWindow(TEXT("SciCalc"), NULL); if (h) { HWND h8 = GetDlgItem(h, 0x84); if (h8) { PostMessage(h8, WM_KEYDOWN, ' ', NULL); PostMessage(h8, WM_KEYUP, ' ', NULL); } }
Ok merci bcp c'est bon sa marche:king:
Sinon tu ne sais pas ou est ce que je peux trouver de la doc sur la gestion du port parallele sous visual?
Merci
recherche sur le forum, ca a du déjà étre abordé
j'ai deja cherché et j'ai rein trouver.
en fait je voudrais envoyer des données via le port parallele sur une carte memoire reliée par le port parallele.
tu sait pas comment on peut faire
Merci bcp