Accueil > Forum > > > > Fenetre mère d'un RECT
Fenetre mère d'un RECT
samedi 13 février 2010 à 00:49:57 |
Fenetre mère d'un RECT

ghostichou
|
Bonjour,
voilà le problème que je rencontre.
Je tente de récupérer les informations que mon écran écrit via la fonction ExtTextOut.
Je redéfini donc la fonction ExtTextOut(...)
J'arrive bien à récupéré ce qui s'affiche mais mon problèmeest que j'aimerai pouvoir savoir d'ou vient ce que je récupère.
Concrètement, lorsque quelque chose s'affiche sur mon écran, j'aimerai savoir dans quelle fenetre (son handle) elle s'affiche.
J'ai d'abord penser à utiliser la fonction WindowFromDC() puisque le premier paramètre de ExtTextOut est un HDC.
Mais cette fonction me renvoie NULL tout le temps.
Du coup je me demandais (et c'est là ma vraie question :) )
Puis-je me servir du paramètre RECT* monrect ?
La fonction ExtTextOut prend un RECT* en paramètre qui est le RECT* dans lequel mon texte s'affiche.
J'aimerai réussir à trouver les coordonnées du point supérieur gauche de ce RECT* et retrouver ainsi facilement le handle de la fenetre.
J'ai cherché partout, j'ai vu comment avoir la largeur , longueur, la marge ect ... mais pas les coordonnées.
Je me sent un peu bloqué y a-t-il un moyen de me sauver :) ?
|
|
samedi 13 février 2010 à 03:03:16 |
Re : Fenetre mère d'un RECT

ghostichou
|
Par soucis de clarté, je précise que ce qui m'interresse c'est de pouvoir retrouver la fenetre mère.
Quand je fait rect->right ect j'ai les coordonnées du point mais dans le référentiel de la fenètre mère donc ça ne m'apporte aucune précision supplémentaire.
|
|
samedi 13 février 2010 à 10:42:16 |
Re : Fenetre mère d'un RECT

BruNews
|
GetDCOrgEx
WindowFromPoint
Partant de ces 2 fonctions, devrait y avoir moyen d'avancer.
ciao...
BruNews, MVP VC++
|
|
samedi 13 février 2010 à 13:09:16 |
Re : Fenetre mère d'un RECT

ghostichou
|
Haaa :)
Je test ça dans quelques minutes :)
Mais jviens d'aller voir le msdn sur ces fonctions ça à l'air de correspondre parfaitement :)
Je te tiens au courant mais en tout cas merci beaucoup ça devrait résoudre mon pb :)
|
|
samedi 13 février 2010 à 14:21:55 |
Re : Fenetre mère d'un RECT

ghostichou
|
Hum ...
Les fonctions que tu m'a proposé ont l'air de fonctionner ... mais pas pour tout.
En fait quand je test de récupérer ce qui s'écrit dans notepad par exemple, ça marche bien.
Je récupère bien un point avec les coordonnées du HDC de notepad niquel.
Mais pour certaines autres applications, ça me renvoie comme coordonnée 0,0 .
Est-ce que ça signifie que pour cette application le HDC utilisé est l'écran tout entier directement ?
Par exemple, quand j'écris un nouveau message ici sur cppfrance, quand j'essaie de récupérer les coordonnées du HDC ... il me met 0,0
Ma cause est-elle perdue à ton avis :) ?
|
|
samedi 13 février 2010 à 14:40:54 |
Re : Fenetre mère d'un RECT

BruNews
|
bouh, que répondre...
Quel moyen d'interception de ExtTextOut() as-tu choisi ?
Comment récupères-tu les hdc ?
etc, etc...
Faut avouer que je n'ai pas le courage d'écrire tout un prog de test, le niveau du réchauffement climatique (-1 à Paris) m'inciterait plutot à l'hibernation.
ciao...
BruNews, MVP VC++
|
|
samedi 13 février 2010 à 14:58:20 |
Re : Fenetre mère d'un RECT

ghostichou
|
En fait je redéfini ExtTextOut dans une dll que j'injecte dans les processus que je veux récupérer (pour mes exemples notepad.exe et firefox.exe).
J'ai trouver sur le net une librairie qui permet facilement la redéfinition de fonction (detours)
Je sauvegarde la fonction de base ExtTextOut :
BOOL (WINAPI * VraiExtTextOut)(HDC hdc, int X, int Y, UINT uint, RECT* rect, LPCWSTR montext, UINT taille, INT* lpDx) =ExtTextOutW;
Je fait la redéfinition comme suit :
BOOL WINAPI Redefinition(HDC hdc, int X, int Y, UINT uint, RECT* rect, LPCWSTR montext, UINT taille, INT* lpDx)
{
//là je fait mon traitement donc sur le texte
// puis je voudrais récupérer le handle de la fenetre ou le texte a été écrit
// donc je fais :
LPPOINT lpPoint=new POINT();
if(GetDCOrgEx(hdc,lpPoint))
{
FILE * pFile;
pFile = fopen ("c:/test3.txt","w");
fseek(pFile,0,SEEK_END);
fprintf (pFile, "x: %d \n et y : %d \n",lpPoint->x,lpPoint->y);
fclose (pFile);
}
// et je rapelle la vraie fonction que j'ai préalablement sauvegardé.
return VraiExtTextOut(hdc, X, Y, uint, rect, montext, taille, lpDx);
}
Puis grâce à la libraire detours que j'ai télécharger sur le net, une méthode me permet de dire qu'à chaque appel de la vraie méthode ExtTextOut, il appel plutot ma redéfinition.
J'espère que j'ai été assez clair ?
Et donc je voudrais le handle de la fenetre.
Mais sur certaine fenetre, le GetDCOrgEx(hdc,lpPoint) me renvoie 0,0 comme coordonnées
et le WindowFromDC me renvoie le handle 0.
Du coup jme suis dit que peut-être le hdc pour ces fenetres là était bizarre et qu'il fallait que je me débrouille avec le RECT ... mais jvois pas quoi faire pour etre franc :)
|
|
samedi 13 février 2010 à 15:17:58 |
Re : Fenetre mère d'un RECT

BruNews
|
Mais si tu as injecté une dll dans un processus (assurément le bon choix) et que ce n'est en fin de compte que le hwnd qui t'intéresse, il ne devrait pas etre trop difficile d'avoir le hwnd DEPUIS la dll. Enfin le transmettre à ton prog par un simple PostMessage serait plus que aisé.
Demain je verrai la suite de tes travaux.
ciao...
BruNews, MVP VC++
|
|
dimanche 14 février 2010 à 00:25:09 |
Re : Fenetre mère d'un RECT

ghostichou
|
Ouai je vois ce que tu veux dire.
C'est vrai qu'à l'injection, ça appelle la méthode DllMain qui prend en paramètre un handle et du coup je pourrai récupérer comme ça le handle.
Le problème, c'est pour des applications genre msn.
A l'injection, le handle va me filer le handle de ma fenetre msn principale.
Mais quand je vais ouvrir une autre fenetre et écrire dedans, je serais pas capable d'avoir le handle de cette fenetre en particulier.
En gros mon problème se pose pour toutes les applications dont plusieurs fenetres peuvent s'ouvrir sous le même processus. (jsé pas si je suis très clair :) )
En fait c'est réellement au moment ou ma fonction affichage ExtTextOut est appelée , et à ce moment précis, j'aimerai connaitre la fenetre ou cette fonction est appelée.
Je cherche en ce moment si il n'existe pas une fonction capable de me donner le handle de la fenetre ou s'execute à l'instant donné ma dll ... mais ca me parait improbable :)
J'ai pensé eventuellement à cliquer sur le HDC à chaque appelle de ExtTextOut, puis de chercher le handle de la fenetre active.
Mais si j'ai peur que ça puisse entrainer des confusion si jamais plusieurs fenetre msn par exemple s'ouvre en meme temps.
|
|
dimanche 14 février 2010 à 00:25:47 |
Re : Fenetre mère d'un RECT

ghostichou
|
PS : au passage merci d'avoir deja passer un peu de temps à essayer de m'aider :)
|
|
Cette discussion est classée dans : affiche, fonction, fenetre, rect, exttextout
Répondre à ce message
Sujets en rapport avec ce message
Conserver une image lors dune perte de Focus [ par crashdown ]
Voila , je my connais pas tres bien en programmation en Vc++ mais je me suis lancer un defi , realiser des fractales dans une fenetre Windows, mais mo
Affichage d'une image [ par stockley81 ]
Bonjour,j'afficher une image dans ma fenetre avec la fonction glDrawPixels mais je voudrais pouvoir l'afficher a des coordonnes precises sur la fenetr
pointeur de fonction [ par Larwin ]
salut tout le mondebon j'suis un gros débutant c/c++ et je fais mes premiers pas depuis 2, 3 jours...j'ai deja un petit probleme :)je m'explique :j'ai
Dimensions fenetre [ par coockiesch ]
Hello et re-hello!!!Je cherche à adapter la taille d'un controle à la taille d'une fenetre lors de la création de celui-ci.Voici mon code (dans WM_CRE
Acces class a travers un timer [ par dambeaufort ]
Bonjour, je viens de creer un timer sous MFCce timer devrais m'appeler une fonction d'une classe, le probleme c que ca me dit que m'a fonction n'est p
mdi sous borland et fonction [ par zelastwarrior ]
Bonjour a tous. Je sui en train de créer une application mdi sous c++builder 5.0 et je bloque a ce niveau. J'arrive à ouvrir une fenetre fille, mais j
ShellExecute [ par axenik ]
Bonjour,A partir d'un code C++, je veux afficher des pages HTML, mais je veux que chaque page HTML s'affiche dans une nouvelle fenetre.J'ai essayé d'u
VC++,SDI, Redessiner le contenu (disparu après reduction fenetre) de la vue apres restauration [ par ninouch ]
J'ai un gros pb. J'utilise la fonction OnDraw() de la classe View pour dessiner plusieurs bitmap selon les données du document. Ca mar
Recuperation d'un handle de fenetre [ par coframi ]
je lance une application avec la fonction CreateProcess.Il faut que je recupére le handle de fenetre associe pour pouvoir masquer ou afficher cette ap
WSAAsyncSelect sans fenetre [ par PunkDude424 ]
Bonjour, est-ce qu'il est possible d'utiliser WSAAsyncSelect sans avoir a créer de fenetre ?? emem invisible???car dans le prototype de la fonction, l
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|