11
votes

Obtenez toutes les poignées de fenêtre pour un processus

Utilisation de Microsoft Spy ++, je peux voir que les fenêtres suivantes appartenant à un processus:

Poignées de fenêtre XYZ XYZ, affichées sous forme d'arborescence, comme SPY ++ me donne: P>

[System.Runtime.InteropServices.DllImport(strUSER32DLL)]
            public static extern int EnumChildWindows(IntPtr hWnd, WindowCallBack pEnumWindowCallback, int iLParam);


1 commentaires

Il y avait une classe C # qui a enveloppé tout cela bien sur le site GotdotNet avant qu'il ne passe. Vous ne pouvez plus le trouver, mais c'est là-bas quelque part ...


3 Réponses :


12
votes

pass intptr.zero comme hwnd pour obtenir chaque poignée de la fenêtre racine dans le système.

Vous pouvez ensuite vérifier le processus du propriétaire de Windows en appelant getWindowThreadProcessid .


1 commentaires

Est-ce le seul moyen? Va essayer cela. Je me demande comment la consommation de cette opération sera ...



7
votes

Vous pouvez utiliser Enumwindows pour obtenir chaque fenêtre de haut niveau, puis filtrer les résultats basés sur GetWindowThreadProcessid .


0 commentaires

11
votes

Pour tout le monde se demandant toujours, c'est la réponse: xxx pré>

pour windowsterop: p> xxx pré>

pour windowsterop.user32: p >

[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("user32.Dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool EnumChildWindows(IntPtr parentHandle, Win32Callback callback, IntPtr lParam);


7 commentaires

Pas seulement votre exemple, mais getchildwindows ne fonctionne tout simplement pas en passant dans process.getCurrentProcess (). Mainwindowhandle. Je lance une fenêtre enfant (modellairement ou non), appelez getchildwindows et le rappel de l'Enumwindow ne tire simplement jamais.


Vous voulez dire OS? Win8.


Windows 8 est le problème.


Non, je viens de l'essayer sur la victoire; même chose. C'est une chose que MS a toujours été bonne à; Ces appels d'API fonctionnent de la même manière sur l'OSS.


J'ai essayé Win8 et ça n'a pas fonctionné. Ils ont changé comment l'écran et les poignées fonctionnent à Win8. Mais pour Win7, cela fonctionne pour moi (même cahier - je l'ai rétrogradé après ces problèmes). Donc, il doit y avoir une autre raison pour laquelle cela ne fonctionne pas pour vous sur Win7. Ce n'est pas le système d'exploitation.


J'ai écrit Win 10 (sans espace) ci-dessus et il s'est transformé en un point-virgule. Donc, Windows 10 ne fonctionne pas non plus.


Windows 8 est le problème - Comment peut-on faire sous Windows 8?