Créez la fonction «Find Window…» de Spy ++ en C #
-
14-11-2019 - |
Question
Je veux créer la même fonction "Find Windows ..." de Spy ++ en C #. J'ai essayé avec cette fonction du winapi:
HWND WINAPI WindowFromPoint(__in POINT Point);
http://msdn.microsoft.com/en-us/library/ms633558.aspxMais je n'arrive pas pour obtenir tous les éléments avec cela, car ils sont handicapés ou cachés.
Par exemple, avec la calculatrice de la fenêtre 7 en mode programmeur, je ne peux pas obtenir le "ABCDEF" avec mon programme s'ils sont désactivés, alors SPY ++ peut l'obtenir.
Edit: j'ai essayé cela mais cela ne fonctionne pas:
[DllImport("user32.dll")]
public static extern ulong GetClassLongPtr(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
public static extern IntPtr ChildWindowFromPointEx(IntPtr hWndParent, Win32Point pt, uint uFlags);
IntPtr hWnd = WindowFromPoint(myPoint);
hWnd= ChildWindowFromPointEx(hWnd , myPoint, 0x0000);
mon point est la position de ma souris.
Je ne connais pas le winapi et j'imagine avec votre explication qui est un manque de compréhension de moi. Il est possible d'avoir un petit exemple de fonction ChildWindowFrompointex ou de savoir ce que mon code ne fonctionne pas? Merci pour votre réponse
J'ai essayé de créer la boucle mais, il semble que la poignée soit sous l'autre poignée mais n'est pas des enfants de la poignée, la boucle envoie toujours la même poignée et non l'enfant désir lorsque la clé "ABCDEF" est désactivée. Avez-vous une autre idée?
La solution
WindowFromPoint
Renvoie une poignée de fenêtre. Puisque vous avez affaire à des fenêtres désactivées / cachées, vous voudriez utiliser Childwindowfrompointex, passant hwndParent
comme quelle que soit la poignée que vous avez obtenue WindowFromPoint
.
Vous pourriez trouver l'article suivant utile:http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx
En ce qui concerne le code que vous avez ajouté, ChildWindowFromPointEx
Prend des coordonnées des clients, tandis que les coordonnées de position de la souris que vous avez sont des coordonnées d'écran. Vous pouvez faire la conversion avec Scripte.
Remarque: C'est la façon Winapi de faire les choses. Je ne sais pas si les fournitures API C #.