Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Communication entre applications / DataGrid

2 réponses
Avatar
DevWDapI
Bonjour,

Je réalise une application permettant d'extraire des données contenues
dans la fenêtre d'une application externe créée par une société tierce.
Ainsi, pour repérer la fenêtre j'utilise le système de "Handle" qui
permet à Windows d'identifier les différents éléments de l'interface.
Cependant je n'arrive pas à accéder à certains éléments comme les
contenus des dataGrid pour qui Windows ne voit qu'un seul handle de
fenêtre pour l'ensemble des éléments qu'il contient.

J'utilise notamment "Greatis Windowse", un programme qui identifie le
"handle" de chaque élément de l'interface (donnant également d'autres
infos comme les fils, les classes des éléments, ...).
Par exemple, dans la capture suivante, nous pouvons identifier plusieurs
éléments qui sont: La fenêtre en elle-même, le StringGrid, un champ de
texte et un bouton.

http://www.magic-soft.net/PostsImages/capture1.PNG

Tous ces éléments sont alors identifiés par un handle unique. Ainsi,
lorsque je demande à Windowse de m'afficher, par exemple, les infos sur
le champ texte, celui-ci, en plus de me donner le handle de ce champ, me
donne son contenu: "Exemple de contenu".
J'arrive sans problème à accéder au contenu texte du champ Input ou a
provoquer à distance le clic sur le bouton (par exemple avec
PostMessage(TheHandle, WM_LBUTTONDOWN, MK_LBUTTON,0).

Cependant, de la même manière, lorsque je demande des informations sur
le StringGrid, celui-ci ne me donne qu'un seul et unique handle
identifiant l'objet dans sa globalité (peu importe la case que je lui
indique) ce qui m'empêche d'accéder à un "sous-objet" en particulier.
Par exemple, j'aimerai connaître la chaîne de caractère située dans la
case B2.

http://www.magic-soft.net/PostsImages/capture2.PNG

M'est-il possible de le faire ? Comment m'y prendre ?

Merci d'avance


DevLXApi

2 réponses

Avatar
Steph
"DevWDapI" a écrit dans le message de news:
h0b6kj$1sg$

Cependant, de la même manière, lorsque je demande des informations sur le
StringGrid, celui-ci ne me donne qu'un seul et unique handle identifiant
l'objet dans sa globalité (peu importe la case que je lui indique) ce qui
m'empêche d'accéder à un "sous-objet" en particulier.



Ca dépend du controle : si c'est un TStringGrid, c'est pas possible comme il
est dessiné (à part faire de l'OCR..)
Ca aurait été possible avec d'autres controles exposant des interfaces COM.
Avatar
marc
DevWDapI a écrit :

http://www.magic-soft.net/PostsImages/capture2.PNG

M'est-il possible de le faire ? Comment m'y prendre ?



Oui, c'est sûrement un TStringGrid (VCL).
Tu peux à la rigueur lire les chaines avec ReadProcessMemory()...