Capture d'écran

galax98 Messages postés 49 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 29 juin 2020 - 27 juin 2020 à 15:55
galax98 Messages postés 49 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 29 juin 2020 - 29 juin 2020 à 11:00
Bonjour,

J'ai repris une vieille application (10 ans) que j'avais développée et certaines choses semblent ne plus fonctionner. Une instruction apparemment simple :

pt.x = 100;
pt.y = 100;
BitBlt(GetDC(g_WndMainFrame),0,0,500,500,GetDC(WindowFromPoint(pt)),0,0,SRCCOPY);

Ceci est donc censé repérer quelle est la fenêtre qui se trouve au point (100,100) de mon écran, puis de copier un carré de 500x500 de cette fenetre sur mon application.
Si la fenêtre en question est une application genre Paint, Excel ou Explorateur windows, ça fonctionne parfaitement, mais si c'est une page web par exemple (à partir de n'importe quel navigateur), ça m'affiche un carré tout blanc .. (ou noir)

Quelqu'un voit il pourquoi ?

Merci


--

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 11
29 juin 2020 à 10:07
Bonjour,

Je ne vois pas pourquoi ça a pu marcher.
Les HWND des autres applications sont accessibles, mais à ma connaissance c'est essentiellement pour pouvoir communiquer avec elles.
Prendre un DC dessus je ne vois pas comment, d'autant qu'au mieux ça serait un WindowDC et dans le cas il faudrait impérativement le rendre par ReleaseDC(). Et un ClassDC ne devrait pas être accessible d'une autre application.
Pour rappel : tous les objets GDI sont locaux à leur application.

Maintenant, on devrait pouvoir accéder à la fenêtre "écran" qui elle, est forcément accessible de toutes les applications, ça donnerait quelque chose comme :
HDC hdcScreen = GetDC(NULL);
BitBlt(GetDC(g_WndMainFrame),0,0,500,500,hdcScreen,0,0,SRCCOPY);
ReleaseDC( hdcScreen );
0
galax98 Messages postés 49 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 29 juin 2020
29 juin 2020 à 11:00
Merci pour ta solution qui fonctionne (juste ReleaseDC(0,hcdScreen))

Mais comme je veux récupérer un élément qui est sur une page (toujours au même endroit), ta solution nécessite que la fenêtre soit toujours pile poil au même endroit sur mon écran, alors que si je pouvais prendre un DC sur son HWND, le positionnement de cette fenetre n'aurait pas d'importance.

Je ne sais pas si je suis bien clair ...

--
0
Rejoignez-nous