Получение информации о свойствах .NET контрола
От: ATsimbalistov Россия  
Дата: 07.09.05 18:27
Оценка:
Подскажите, пожалуйста, каким образом можно получить сведения об элементе управления расположенном в каких-то конкретных координатах экрана.

Задача стоит чтобы перехватывая события мыши (скажем, клик) можно было определить какая кнопка (и какому окну принадлежащая) была нажата.
Если кто в курсе, необходимо сделать приложение наподобие AutoIt.

Или такие задачи решаются глобальным перехватом сообщений WM_COMMAND и последующим разбором где и что было сделано? Интересует решение для контролов .NET и стандартных win32, если есть отличие в этом.

Также потом будет необходимо воспроизводить события, т.е. по записанным параметрам (скажем, caption кнопки) выполнять действия пользователя.
Получение информации о свойствах .NET контрола
От: Аноним  
Дата: 08.09.05 00:12
Оценка: +1
> каким образом можно получить сведения об элементе управления расположенном в каких-то конкретных координатах экрана.
Задача стоит чтобы перехватывая события мыши (скажем, клик) можно было определить какая кнопка (и какому окну принадлежащая) была нажата.

События мыши перехватываются с помощью Global Mouse Hook (на сайте есть примеры, но почему-то глобальный хук под дебагером не работает)

Чтобы найти контрол под курсором:

[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point point);

[DllImport("user32.dll")]
private static extern bool GetCursorPos(out Point position);

Point position;
GetCursorPos(out position);
IntPtr hwnd = WindowFromPoint(position);
Control c = Control.FromHandle(hwnd);
---
Конкурс 2005: LayeredWindow, Lens, MenuBuilder, Win32Resource, Html2Xml Converter


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Получение информации о свойствах .NET контрола
От: orangy Россия
Дата: 09.09.05 04:28
Оценка:
Здравствуйте, Varg, Вы писали:

V>[DllImport("user32.dll")]

V>private static extern bool GetCursorPos(out Point position);
А чем Cursor.Position не устроил?

        public static Point Position
        {
            get
            {
                System.Windows.Forms.NativeMethods.POINT point1 = new System.Windows.Forms.NativeMethods.POINT();
                System.Windows.Forms.UnsafeNativeMethods.GetCursorPos(point1);
                return new Point(point1.x, point1.y);
            }
... << RSDN@Home 1.1.4 beta 7 rev. 499>>
"Develop with pleasure!"
Получение информации о свойствах .NET контрола
От: Аноним  
Дата: 13.09.05 21:43
Оценка:
Varg, сделал как вы сказали. Но Control.FromHandle(hwnd) работает только для окон внутри моего приложения, если же запрашивается какое-то внешнее окно, то оно не возвращает контрола. Здесь какие-то фишки с безопасностью?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Получение информации о свойствах .NET контрола
От: Аноним  
Дата: 04.10.05 11:36
Оценка:
> Control.FromHandle(hwnd) работает только для окон внутри моего приложения, если же запрашивается какое-то внешнее окно, то оно не возвращает контрола. Здесь какие-то фишки с безопасностью?

скорее всего, что да.
---
мои работы (конкурс 2005): LayeredWindow, Lens, MenuBuilder, Win32ResourceManager, Html2XmlConverter, DropDownHolder (Popup).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Получение информации о свойствах .NET контрола
От: Аноним  
Дата: 04.10.05 11:59
Оценка:
оказывается дело не в безопасности, а в том, что в глубинах вызова Control.FromHandle определяется следующее: если hwnd не был ранее сохранен в private static массиве (определен в классе NativeWindow), то метод Control.FromHandle вернет null.
У каждого приложения свой private static массив.
---
мои работы (конкурс 2005): LayeredWindow, Lens, MenuBuilder, Win32ResourceManager, Html2XmlConverter, DropDownHolder (Popup).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.