создать функцию «найти окно ...» из spy ++ в C # - PullRequest
4 голосов
/ 01 марта 2012

Я хочу создать ту же функцию «Найти окна ...» из spy ++ в C #.Я попытался с этой функцией WINAPI:

HWND WINAPI WindowFromPoint(__in  POINT Point);

http://msdn.microsoft.com/en-US/library/ms633558.aspx Но я не могу получить все элементы с этим, потому что они отключены или скрыты.

Например, с калькулятором окна 7 в режиме Программиста, я не могу получить «ABCDEF» с моей программой, если они отключены, тогда spy ++ может получить его.

Редактировать: я пробовал это, но это не работает:

[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);

myPoint - это позиция моей мыши.

Я не знаком с WINAPI и представляю из вашего объяснения, что мне не хватает понимания.Можно привести небольшой пример функции ChildWindowFromPointEx или узнать, что мой код не работает?спасибо за ваш ответдочерний, когда ключ "abcdef" отключен.У вас есть другая идея?

1 Ответ

5 голосов
/ 01 марта 2012

WindowFromPoint возвращает дескриптор окна. Поскольку вы имеете дело с отключенными / скрытыми окнами, вы можете использовать ChildWindowFromPointEx , передавая hwndParent в качестве любого дескриптора, полученного из WindowFromPoint.

Может оказаться полезной следующая статья: http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx


Что касается кода, который вы добавили, ChildWindowFromPointEx принимает координаты клиента, тогда как ваши координаты положения мыши являются экранными координатами. Вы можете сделать преобразование с помощью ScreenToClient .

Примечание. Это способ работы с WinAPI. Я понятия не имею, поставляет ли или что API C #.

...