Je suis en train de réaliser un programme de capture de fenêtres. J'arrive
à capturer des fenêtres "normales" via un GetForegroundWindow() et un
BitBlt() adapté, mais je ne parviens pas à capturer des fenêtres faisant
partie d'une application MDI.
J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas
comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du
hWnd de la fenêtre client, que je ne vois pas comment récupérer.
Auriez vous une idée ou un bout de code pour m'aiguiller ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian ASTOR
Laura Martignas a écrit:
J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du hWnd de la fenêtre client, que je ne vois pas comment récupérer.
Auriez vous une idée ou un bout de code pour m'aiguiller ?
Comme dit l'aide... "to a multiple-document interface (MDI) client window" => HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Laura Martignas a écrit:
J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas
comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du
hWnd de la fenêtre client, que je ne vois pas comment récupérer.
Auriez vous une idée ou un bout de code pour m'aiguiller ?
Comme dit l'aide... "to a multiple-document interface (MDI) client window"
=>
HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du hWnd de la fenêtre client, que je ne vois pas comment récupérer.
Auriez vous une idée ou un bout de code pour m'aiguiller ?
Comme dit l'aide... "to a multiple-document interface (MDI) client window" => HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Laura Martignas
Christian ASTOR a écrit :
Comme dit l'aide... "to a multiple-document interface (MDI) client window" => HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une application MDI, je dois d'abord récupérer le hWnd de l'application MDI via GetForegroundWindow() (en supposant que cette application soit active), puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir la fenêtre enfant active, c'est bien ça ?
Merci de ton aide Laura
Christian ASTOR <castorix@club-internet.fr> a écrit :
Comme dit l'aide... "to a multiple-document interface (MDI) client
window" =>
HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une
application MDI, je dois d'abord récupérer le hWnd de l'application MDI via
GetForegroundWindow() (en supposant que cette application soit active),
puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et
enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir
la fenêtre enfant active, c'est bien ça ?
Comme dit l'aide... "to a multiple-document interface (MDI) client window" => HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une application MDI, je dois d'abord récupérer le hWnd de l'application MDI via GetForegroundWindow() (en supposant que cette application soit active), puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir la fenêtre enfant active, c'est bien ça ?
Merci de ton aide Laura
Christian ASTOR
Laura Martignas a écrit:
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une application MDI, je dois d'abord récupérer le hWnd de l'application MDI via GetForegroundWindow() (en supposant que cette application soit active), puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir la fenêtre enfant active, c'est bien ça ?
Oui, tout-à-fait. Pour tester, il suffit d'utiliser un timer (5 sec par ex), puis ds le WM_TIMER => { char sText[256]; HWND hWndMDI = GetForegroundWindow(); HWND hWndClient = FindWindowEx(hWndMDI, NULL, "MDIClient", NULL); HWND hWndActive = (HWND)SendMessage(hWndClient, WM_MDIGETACTIVE, 0, NULL); wsprintf(sText, "hWnd = %x", hWndActive); MessageBox(NULL, sText, "Information", MB_OK | MB_ICONINFORMATION); }
Tu vérifies alors avec Spy++, que c'est bien la bonne child affichée qd la MDI est en foreground...
Laura Martignas a écrit:
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une
application MDI, je dois d'abord récupérer le hWnd de l'application MDI via
GetForegroundWindow() (en supposant que cette application soit active),
puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et
enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir
la fenêtre enfant active, c'est bien ça ?
Oui, tout-à-fait.
Pour tester, il suffit d'utiliser un timer (5 sec par ex), puis ds le
WM_TIMER =>
{
char sText[256];
HWND hWndMDI = GetForegroundWindow();
HWND hWndClient = FindWindowEx(hWndMDI, NULL, "MDIClient", NULL);
HWND hWndActive = (HWND)SendMessage(hWndClient, WM_MDIGETACTIVE, 0, NULL);
wsprintf(sText, "hWnd = %x", hWndActive);
MessageBox(NULL, sText, "Information", MB_OK | MB_ICONINFORMATION);
}
Tu vérifies alors avec Spy++, que c'est bien la bonne child affichée qd
la MDI est en foreground...
Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une application MDI, je dois d'abord récupérer le hWnd de l'application MDI via GetForegroundWindow() (en supposant que cette application soit active), puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir la fenêtre enfant active, c'est bien ça ?
Oui, tout-à-fait. Pour tester, il suffit d'utiliser un timer (5 sec par ex), puis ds le WM_TIMER => { char sText[256]; HWND hWndMDI = GetForegroundWindow(); HWND hWndClient = FindWindowEx(hWndMDI, NULL, "MDIClient", NULL); HWND hWndActive = (HWND)SendMessage(hWndClient, WM_MDIGETACTIVE, 0, NULL); wsprintf(sText, "hWnd = %x", hWndActive); MessageBox(NULL, sText, "Information", MB_OK | MB_ICONINFORMATION); }
Tu vérifies alors avec Spy++, que c'est bien la bonne child affichée qd la MDI est en foreground...
Laura Martignas
Christian ASTOR a écrit :
Oui, tout-à-fait.
Merci beaucoup pour ton aide :)
Christian ASTOR <castorix@club-internet.fr> a écrit :