2010-11-20 2 views
3

J'ai essayé d'utiliser la méthode "récupérer tous les ID de processus énumérés par le bureau", mais cela ne fonctionne pas. Y at-il un moyen de convertir une poignée en une poignée de fenêtre ou Existe-t-il un moyen de prendre un ID de processus et de découvrir toutes les fenêtres enfants générées par le processus? PS: Je ne souhaite pas utiliser FindWindow en raison de problèmes de processus multiples.Gestion de la poignée de la fenêtre (c)

Répondre

4

Vous pouvez appeler le EnumWindows() pour parcourir toutes les fenêtres de niveau supérieur à l'écran, puis utiliser GetWindowThreadProcessId() pour trouver celles qui appartiennent à votre processus.

Par exemple, quelque chose comme:

BOOL CALLBACK ForEachTopLevelWindow(HWND hwnd, LPARAM lp) 
{ 
    DWORD processId; 
    GetWindowThreadProcessId(hwnd, &processId); 
    if (processId == (DWORD) lp) { 
     // `hwnd` belongs to the target process. 
    } 
    return TRUE; 
} 

VOID LookupProcessWindows(DWORD processId) 
{ 
    EnumWindows(ForEachTopLevelWindow, (LPARAM) processId); 
} 
Questions connexes