begin process at 2012 05 29 06:03:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Fenetre mère d'un RECT


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales