Win32 - Get Principal Wnd Poignée d'application
J'ai injecté ma dll dans le processus.
Comment puis-je obtenir Principale de la poignée de la fenêtre de l'application hôte?
Je pense que la "victime application" est un meilleur terme que "l'application hôte". Si des hommes armés ont fait irruption dans ma maison et m'a tenu en otage, je serais la victime, pas l'hôte.
OriginalL'auteur Hooch | 2011-06-01
Vous devez vous connecter pour publier un commentaire.
L'application hôte peut avoir plusieurs 'principale' de windows. Pour les détecter, vous pourriez
GetCurrentProcessId
pour obtenir le PID du processus courantEnumWindows
pour itérer sur tous les toplevel windows de l'ordinateur de bureauGetWindowThreadProcessId
pour obtenir le PID du processus qui a créé la fenêtreQui vous donne une liste de fenêtres de niveau supérieur créé par le processus qui vous a injecté votre DLL dans. Cependant, veuillez noter que cette approche peut donner des fenêtres qui ont été détruits par le temps vous le processus de la construction de la liste de windows. Par conséquent, lorsque vous faites quelque chose avec windows, assurez-vous d'utiliser le
IsWindow
fonction afin de s'assurer que la fenêtre à portée de main est toujours valide (ce qui est encore sujette à des conditions de course depuis la fenêtre peut devenir non valide entre votre appel àIsWindow
et fait accéder à la fenêtre, mais la fenêtre de temps est beaucoup plus petit).Voici une fonction C++ mise en œuvre de cet algorithme. Il met en œuvre un
getToplevelWindows
fonction qui renvoie unstd::vector<HWND>
contenant les poignées de toutes les toplevel windows de la processus actuel.mise à JOUR: Ces jours-ci (environ quatre ans après que j'ai donné la réponse) je voudrais également envisager d' parcourant la liste des threads de la demande, puis à l'aide de
EnumThreadWindows
sur chaque thread. J'ai remarqué que c'est beaucoup plus rapide dans de nombreux cas.OriginalL'auteur Frerich Raabe