Как spy ++ узнает, что это за окно в определенной точке экрана? - PullRequest
7 голосов
/ 25 августа 2009

Мне любопытно, как Spy ++ Finder Tool обнаруживает дескриптор окна для окна, над которым находится мышь. Есть ли какая-нибудь функция WIN32 для получения дескриптора самого верхнего окна, которое занимает определенный пиксель на дисплее?

Ответы [ 5 ]

12 голосов
/ 25 августа 2009

Существует функция WindowFromPoint () .

6 голосов
/ 25 августа 2009

Вот довольно полный пример того, как реализовать поиск spy ++.

http://www.codeproject.com/KB/dialog/windowfinder.aspx

4 голосов
/ 18 мая 2011

Здесь есть некоторая приятная информация о внутренностях Spy ++: http://blogs.msdn.com/b/vcblog/archive/2007/01/16/spy-internals.aspx. Он поддерживает ответ DeusAduro, что Spy ++ устанавливает глобальные хуки (фактически 3 хука, один из которых WH_CALLWNDPROC).

Вы также можете найти дополнительную информацию о Spy ++ - клоне здесь: http://www.codeproject.com/KB/dialog/windowfinder.aspx.

Кроме того, здесь должна быть загружена очень похожая программа в SDK: http://msdn.microsoft.com/en-us/library/Aa231779, но, похоже, она повреждена (нет загрузки - как и многие ссылки на msdn :().

В зависимости от того, что вы хотите получить (если это не hwnd), вы также можете получить 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);
3 голосов
/ 25 августа 2009

WindowFromPoint или ChildWindowFromPoint Функции API.

0 голосов
/ 25 августа 2009

Не цитируйте меня, но я уверен, что spy ++ установит хук WH_CALLWNDPROC. Затем отправляются все сообщения WM_MOUSEMOVE до того, как они достигают своих окон назначения. Таким образом, как только вы наводите курсор мыши на окно, spy ++ получает сообщение о том, какое окно.

...