Tengo curiosidad por cómo spy ++ Finder Tool encuentra el identificador de ventana para la ventana sobre la que se encuentra el mouse. ¿Hay alguna función WIN32 para obtener el control de la ventana superior que ocupa un cierto píxel en la pantalla?¿Cómo descubre spy ++ qué es la ventana en cierto punto de la pantalla?
Respuesta
Hay una función WindowFromPoint().
No me cites, pero creo que el spy ++ instalaría un enganche WH_CALLWNDPROC. A continuación, se envían todos los mensajes WM_MOUSEMOVE antes de que lleguen a sus ventanas de destino. Por lo tanto, tan pronto como pase el mouse sobre una ventana, el espía ++ recibe un mensaje indicándole qué ventana.
Probablemente no sea el caso: Spy ++ probablemente tome la captura del mouse (SetCapture ()) cuando haces clic en la cruz, entonces recibe los mensajes WM_MOUSEMOVE a medida que los arrastras, no la ventana debajo del puntero. Es probable que Spy ++ simplemente use WindowFromPoint/ChildWindowFromPoint ya que hace que el mouse se mueva, no se requiere enganche. – BrendanMcK
WindowFromPoint
o ChildWindowFromPoint
Funciones de API.
Este es un ejemplo bastante completo de cómo implementar el buscador de espías ++.
Hay alguna información agradable en la parte interna de Spy ++ aquí: http://blogs.msdn.com/b/vcblog/archive/2007/01/16/spy-internals.aspx. Es compatible con la respuesta de DeusAduro, que Spy ++ instala ganchos globales (en realidad 3 ganchos, uno de los cuales es WH_CALLWNDPROC).
También puede encontrar más información sobre un clon de Spy ++ - aquí: http://www.codeproject.com/KB/dialog/windowfinder.aspx.
Además, debe haber una descarga de una aplicación muy similar en el SDK aquí: http://msdn.microsoft.com/en-us/library/Aa231779 pero parece no estar funcionando (sin descarga - como tantos enlaces en MSDN :()
Dependiendo de lo que. desee obtener (si no es un hwnd) también se puede obtener un AutomationElement:?
System.Windows.Point pt = new System.Windows.Point(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
AutomationElement ae = AutomationElement.FromPoint(pt);
- 1. Colocación de una ventana en la pantalla
- 2. Android - Descubre qué hora del día es
- 3. La ventana aparece fuera de la pantalla en ubuntu
- 4. ¿Cómo configuro el tamaño de la ventana/pantalla en xna?
- 5. ¿Cómo centrar una ventana en la pantalla en Tkinter?
- 6. ¿Cómo centro una ventana en la pantalla en C#?
- 7. ¿Por qué algunos elementos aparecen atenuados en la vista de Windows de Spy ++?
- 8. ¿Cómo mostrar la ventana emergente a pantalla completa en javascript?
- 9. Descubre la intercalación de una columna MySQL
- 10. ¿Cómo determinar si la ventana actual es la ventana activa?
- 11. determine si el punto en la pantalla se encuentra dentro de la subvista UIScrollView específica
- 12. Cómo establecer la posición de la ventana WPF en la pantalla secundaria
- 13. Adjuntar a la 'pantalla' sesión con la creación de una nueva ventana de pantalla
- 14. ¿Cómo puedo obtener una funcionalidad similar a la de Spy ++ en mi aplicación C#?
- 15. ¿Es cierto que la interoperabilidad SOAP es un mito?
- 16. MySQL borrar fila hasta cierto punto
- 17. ¿Cómo rotar un vértice alrededor de un cierto punto?
- 18. ¿Es el caso correcto para Mockito spy?
- 19. Clase para colocar una ventana en la pantalla
- 20. ¿Para qué es la ventana lambda de LinqPad?
- 21. Spy ++ para aplicaciones PowerBuilder
- 22. Ventana emergente, Pantalla central
- 23. Cómo detectar la presencia de cierto dispositivo
- 24. ¿Qué es una ventana de Android?
- 25. ¿Cómo usar el objeto Spy en PHPUnit?
- 26. La pantalla del modo shell Emacs es demasiado ancha después de dividir la ventana
- 27. ¿Cómo mostrar la brújula en la pantalla?
- 28. ¿Cómo puedo maximizar la ventana de WPF en la pantalla con el cursor del mouse?
- 29. PHP: Leer de cierto punto en el archivo
- 30. Tomar la ventana de OpenCV y hacer pantalla completa
ya que devuelve un 'HWND', sería' WindowFromPoint' trabajar con ventanas de otro proceso –
HWNDs son válidos en todo el territorio OS, entonces sí. – DeusAduro
gracias, eso es lo que estaba buscando. Utilicé algo como esto befo re: HWND wnd = (HWND) 0x ....; SendMessage (wnd, ...); y funcionó bien (era una ventana para otra aplicación), así que creo que funciona con ese mango también. :) – Razvi