voilà j'ai un petit programme DOS qui fait une capture d'écran d'une fenêtre... le problème c'est que de temps en temps la fenêtre DOS se met devant la fenêtre à capturer et du coup la copie d'écran est foireuse...
voiçi mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
	ShowWindow(hDesktopWnd, SW_SHOW);
        SetForegroundWindow(hDesktopWnd);
 
	RECT rect;
	bool bValue = GetWindowRect(hDesktopWnd, &rect);
	if (! bValue) {
		DWORD err = GetLastError();
                return;
	}
 
	int xScreen,yScreen;	//check if the window is out of the screen or maximixed <Qiang>
	//int xshift = 0, yshift = 0;
	xScreen = GetSystemMetrics(SM_CXSCREEN);
	yScreen = GetSystemMetrics(SM_CYSCREEN);
	if(rect.right > xScreen)
		rect.right = xScreen;
	if(rect.bottom > yScreen)
		rect.bottom = yScreen;
	if(rect.left < 0){
		//xshift = -r.left;
		rect.left = 0;
	}
	if(rect.top < 0){
		//yshift = -r.top;
		rect.top = 0;
	}
 
	if (hauteur < 0) hauteur = rect.bottom - rect.top;
	if (largeur < 0) largeur = rect.right - rect.left;
 
	if (abscisse < 0) abscisse = rect.left;
	if (ordonnee < 0) ordonnee = rect.top;
 
	HDC ScreenSrc;
	ScreenSrc = GetWindowDC(hDesktopWnd);
	if (ScreenSrc == NULL) return;
 
// create a memory context to select the dibsection into
        HDC memDC = CreateCompatibleDC(ScreenSrc);
        HBITMAP hbmp=CreateCompatibleBitmap(ScreenSrc,largeur,hauteur);
        SelectObject(memDC, hbmp);
          BitBlt(memDC,0,0,largeur,hauteur,ScreenSrc,abscisse,ordonnee,SRCCOPY);
je suppose que le ShowWindow est peut etre mal placé ou autre... la fenetre ligne de commande s'ouvrant finalement assez doucement, y a-t-il un moyen de minimiser par défaut la fenetre de la ligne de commande
l'application DOS de capture d'écran est appelé par l'application à prendre en capture par spawnl()