Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SendMessage есть, но клик не по кнопке, а по форме под ней о_О 
:(
    Опции темы
NewbieNoob
Дата 30.10.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Код

  px:=Form1.Left+StrToInt(edtx.Text)+form1.Width-form1.ClientWidth;
  py:=Form1.top+StrToInt(edty.Text)+form1.Height-form1.ClientHeight;
  dw:=MakeLParam(px,py);
  h:=FindWindow(nil,'Form1');
  SendMessage(h,WM_LBUTTONDOWN, MK_LBUTTON,dw);
  SendMessage(h,WM_LBUTTONUP,MK_LBUTTON,dw);

Происходит событие клика по форме, а не по кнопке(а еит вводятся координаты кнопки), фокус на кнопку не переносится.
При этом я ловил OnMouseDown и Up на форме, координаты совпадали с передаваемыми, переносил курсор на координаты клика - он вставал над кнопкой, руками тыкал клик, кнопка срабатывала, в чем может быть ошибка?

PM MAIL   Вверх
jhonyxakep
Дата 30.10.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

Репутация: нет
Всего: 8



Цитата(NewbieNoob @  30.10.2011,  13:20 Найти цитируемый пост)
h:=FindWindow(nil,'Form1');


Вы ведь явно тут нашли хендл окна, а не кнопки.
PM MAIL ICQ   Вверх
NewbieNoob
Дата 30.10.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



мм, ну по идее, клик должен быть в окне, но не по самому окну, а по элементу. Когда программа будет готова, хэндл элемента получить не получится, надо отправлять сообщение о клике в окно, как будто пользователь кликнул.
h:=FindWindow(nil,'prog') - пробовал получать хэндл приложения, но тоже не получается
PM MAIL   Вверх
bems
Дата 30.10.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



NewbieNoob, твоя кнопка тоже окно. у неё свой хендл. это значит отправляй сообщение кнопке а не форме. что не понятно?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
NewbieNoob
Дата 30.10.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



А все прочитать сложно? Не будет потом хэндла кнопки, это сейчас, для тестов... Если через sendmessage вобще не получится, так и скажите.
PM MAIL   Вверх
bems
Дата 30.10.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



NewbieNoob, разговаривай ровнее.
Если кнопка останется кнопкой (TButton), то хендл у неё будет. Найти его можно например с помощью ChildWindowFromPoint.
Не будет хендла только в случае если кнопка не наследуется от TWinControl (например TSpeedButton)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
NewbieNoob
Дата 30.10.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 30.10.2011

Репутация: нет
Всего: нет



Извиняюсь.
А еще хэндла не будет если программа рассчитана на универсальную работу с любым приложением. Проблема именно в том, что нужно эмулировать клик только по координатам.
Скорее всего, этими средствами так сделать не получится, но, наверное, можно на более низком уровне добиться желаемого?
PM MAIL   Вверх
northener
Дата 30.10.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(NewbieNoob @  30.10.2011,  17:07 Найти цитируемый пост)
А еще хэндла не будет если программа рассчитана на универсальную работу с любым приложением. Проблема именно в том, что нужно эмулировать клик только по координатам.

Если не будет хэндла, то по "чему" кликать-то будем?
Если приложение "оконное", то хэндл будет обязательно, куда ж без него? А если не оконное, то при чём тут SendMessage?
Так что "универсальная работа с любым приложением" - это, имхо, фантастика.

Цитата(NewbieNoob @  30.10.2011,  17:07 Найти цитируемый пост)
наверное, можно на более низком уровне добиться желаемого

Наверно можно. Подменив драйвер мыши. Но вот нужно ли? 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 31.10.2011, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(NewbieNoob @  30.10.2011,  17:07 Найти цитируемый пост)
Проблема именно в том, что нужно эмулировать клик только по координатам.
ChildWindowFromPoint пока не закончатся уровни вложенности окон тебя спасёт



--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 31.10.2011, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  31.10.2011,  00:08 Найти цитируемый пост)
ChildWindowFromPoint пока не закончатся уровни вложенности окон тебя спасёт

Он хочет работать без хэндлов! Ну т.е. никаких!
Значит и окон не предвидится. О чём тогда мы говорим, и что ему советовать? 
Он хочет "кликать по координатам". Ну так бог ему в помощь, если учебники он не читал.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 31.10.2011, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(northener @  31.10.2011,  00:25 Найти цитируемый пост)
О чём тогда мы говорим, и что ему советовать? 
Он хочет "кликать по координатам"

тогда мы советуем использовать SendInput и просим выложить видеозапись попыток реализации smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 31.10.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  31.10.2011,  00:36 Найти цитируемый пост)
и просим выложить видеозапись попыток реализации 

Вот насчёт видеозаписи, это ты хорошо сказал. smile



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.