Un grand merci pour la mise à disposition de cette boite à outils que j’utilise depuis des années.
Je rencontre aujourd’hui deux problèmes avec la fonction gflImportFromHWND,
Le premier problème me semble lié aux configurations a 2 écrans.
Je souhaite faire des copies d’écran de la fenêtre **Rendu** d’une autre application.
J’utilise Visual Studio 2012 et gflSDK 3.40
J’ai le problème, aussi bien sous Win 8.1 Pro x64, Pilote Vidéo ATI Radeon que sous Win 7 SP1 Pro x64, Pilote Vidéo NVIDIA Quadro FX, le tout étant à jour.
Voici le source C simplifié
Code: Select all
HWND hWin;
GFL_ERROR iGFLerror;
GFL_BITMAP *pBitmap;
GFL_RECT Rect;
RECT Rct;
// Obtenir un handle sur la fenetre **Rendu**
if (NULL==(hWin=FindWindow("RenderClass","**Rendu**")))
{ fprintf(stderr,"*** Impossible d'obtenir un handle sur la fenetre '**Rendu**'. Abandon ...\n"); return(1); }
// Obtenir ses dimensions et preparer la structure GFL_RECT
if (0==GetClientRect(hWin,&Rct))
{ fprintf(stderr,"*** Impossible d'obtenir la taille de la zone. Abandon ...\n"); return(1); }
Rect.x=0; Rect.y=0; Rect.w=(Rct.right-Rct.left)+1; Rect.h=(Rct.bottom-Rct.top)+1;
printf("La taille de la zone de rendu est %d sur %d\n",Rect.w-1,Rect.h-1);
// HWND --> GFL_BITMAP
if ((iGFLerror=gflImportFromHWND(hWin, &Rect, &pBitmap)) != GFL_NO_ERROR)
{ fprintf(stderr,"*** %s. Abandon ...\n",gflGetErrorString (iGFLerror)); return(1); }
printf("La taille de la zone lue est %d sur %d\n",pBitmap->Width,pBitmap->Height);
Si la fenêtre **Rendu** est uniquement sur l'écran primaire, à l’exécution s’affiche
La taille de la zone de rendu est 1280 sur 720
La taille de la zone lue est 1280 sur 720
Aucun problème, la GFL_BITMAP peut être sauvegardée sur disque.
Si la fenêtre **Rendu** est a cheval sur les 2 ecrans, à l’exécution s’affiche
La taille de la zone de rendu est 1280 sur 720
La taille de la zone lue est 698 sur 720
Petit problème, la GFL_BITMAP peut être sauvegardée sur disque mais l’image est incomplète, il manque le partie située sur l’écran secondaire.
Si la fenêtre **Rendu** est uniquement sur l'écran secondaire, à l’exécution s’affiche
La taille de la zone de rendu est 1280 sur 720
*** Unknown error. Abandon ...
Plus gênant, la fonction gflImportFromHWND échoue.
Le deuxième problème concerne la GFL_RECT, pour obtenir une GFL_BITMAP de 1280 par 720, je dois l’initialiser à w=1281 et h=721.
Ai je raté quelque chose ou bien gflImportFromHWND ne genre pas le ‘Multi Screen’ ?
Merci de m’aider a résoudre ce problème.
Salutations.