![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Здравствуйте.
Подскажите пожалуйста, как передать клик мышкой окну, которое находится за пределами рабочего стола (например видна только половина окна, другая половина за пределми) и при этом не перемещать курсор мышки (т.е. отправить сообщение о клики в окне на заданых координатах) |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 5 Всего: 60 |
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Дак ведь оно просто кликнет на заданых координатах, а мне нужно кликнуть по части окна, которая за границей монитора, при этом не переместив курсор мышки.
И при этом клик отправить в конкретное окно(указав хендл), ведь окон может быть множество, в пределах одних координат т.е. по сути меня интересует вопрос, можно ли как-то окну сказать "Тебе нажли мышкой в таких-то координатах", на смотря на то что в очередь событий с вводных устройств действия добавляться не будет? Это сообщение отредактировал(а) lollollollol - 24.8.2013, 07:10 |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 5 Всего: 60 |
Кординаты передать нельзя(Вернее надо читать доку что бы узнать) а вот сказать можно например через FindWindowEx + SendMessage
Это сообщение отредактировал(а) Sanchezzz - 24.8.2013, 10:13 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Хендл окна посмотрел через WinSpy++, проверил это именно то окно(подвигал его), но на клик никак не реагирует. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
А 300 и 42 откуда взял? По-моему там надо передавать координаты относительно рабочего стола. Нужно глянуть msdn. А еще по-моему есть сообщение WM_Click
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Я координаты и относительно раб стола передавал, и относительно окна где выполняю клик, мне кажется проблема в дочерних окнах, могу ошибаться.
Для примера, попробуй открыть 5 вкладок в браузере. Потом почти полностью передвинуть его за пределы раб стола. (предварительно получив координаты, куда будешь кликать, я с помощью скриншота окна и фотошопа получаю координаты) После этого передать клик по коодинатам, чтобы браузер показал другую вкладку. Это сообщение отредактировал(а) lollollollol - 24.8.2013, 12:09 |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Я бы экспериментировал не с фотошопом, а с самой программой. Для начала проверь получает ли программа в принципе твое сообщение (вдруг все-таки окно определил не правильно), а потом уже разбирайся с координатами. Получать Handle чужого окна можно прямо из своего кода без Spy++. Копай в сторону FindWindow.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
я знаю, сообщение окно получает(ну когда перемещаю и т.д.) а значит и хендл верный
|
|||
|
||||
| Poseidon |
|
||||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Значит не верно координаты передаешь. Откуда этот код?
MSDN читал?
Попробуй так
Это сообщение отредактировал(а) Poseidon - 24.8.2013, 18:20 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||||
|
|||||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Если там,куда хочешь кликнуть, находится дочернее окно (button/edit/panel итп) то сообщение нужно слать ему, а не главному окну.
Добавлено через 13 минут и 5 секунд Да все правильно здесь. Так и написано x - младшая часть, y - старшая. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
А как Windows тогда это делает?
Вот например делаю я клик по координатам 100,100, как windows определяет какое там дочернее окно? |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
т.е вопрос формулируется так:
1. Как можно получить хендл дочернего окна, по указаным координатам. (неужели придёися перебирать все дочерние окна, и смотреть их позции? Мжет быть в системе есть функция готовая?) 2. Координаты нужно указывать относитьно рабочего стола(даже за педелами разрешения монитора?) или относительно основного окна? Это сообщение отредактировал(а) lollollollol - 25.8.2013, 08:58 |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Есть WindowFromPoint, но она работает только в пределах экрана.
А так и делает, какое окно сверху тому и шлет сообщение.
Да скорей всего. Но ничего страшного здесь нет. Кроме того, если ты хочешь кликнуть по нарисованной кнопке на web странице (клик обрабатывается через javascript), то прежде нужно послать WM_MOUSEMOVE. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |