Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2014, 15:53   #11
MaxXx_1
Новичок
Джуниор
 
Регистрация: 05.11.2014
Сообщений: 6
По умолчанию

Ну не щёлкает он блин ни как ни щёлкает. Уже устал бится головой об стол. Кто нибудь может дать внятный ответ? 3 форума и одни бла бла бла
Код:
procedure Poshla;
var
w1:THandle;
begin
W1 := FindWindow('TPanel', ' WР Рackеt Cоnvеrtеr v7.6');
if W1 <> 0 then
begin
sendmessage(w1, WM_LBUTTONDBLCLK, 10, 10);
ShowMessage('+');
end
else
ShowMessage('-');
Может кто нибудь дать реальный код как произвести щелчок мыши в другом окне? Находить находит но не щёлкает в упор, ни одинарный ни двойной, вобще ни как, свернуто развёрнуто, разные координаты. Что не так? Подскажите.
MaxXx_1 вне форума Ответить с цитированием
Старый 06.11.2014, 09:37   #12
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Если окно развёрнуто и не перекрывается, то
Код:
  setcursorpos(X,Y);
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
  Application.ProcessMessages;
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
X, Y - экранные координаты
Чтобы узнать эти х,у, нужно узнать на сколько кнопку смещена относительно формы (узнать можно с помощью программы WinSpy++ или аналогичной) и прибавить к ним координаты самой формы
Код:
var
  h: HWND;
  rect: TRect;
begin
  h:=GetForegroundWindow;
  GetWindowRect(h,rect);
rect.Left, rect.Top - координаты формы
eoln вне форума Ответить с цитированием
Старый 06.11.2014, 11:14   #13
MaxXx_1
Новичок
Джуниор
 
Регистрация: 05.11.2014
Сообщений: 6
По умолчанию

Если развернуто то да, просто я хотел то-бы все происходило в фоновом режиме. Но видимо ни кто не шарит в этой вещи и придётся так реализовывать.
ПРосто самому интересно почему при отправке сообщения о щелчке не нажимается ни чего. ПРичём пробую просто сам создаю одну форму с кнопкой обычно и вторую для щелчка. Отправляю сообщение о щелчке на фторую форму и ни чего не происходит.
MaxXx_1 вне форума Ответить с цитированием
Старый 06.11.2014, 22:55   #14
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Отправляю сообщение о щелчке на фторую форму и ни чего не происходит
Так кому сообщение? Форме? Форма не обрабатывает событие OnClick? А оно у нее есть вообще? sendmessage - это не имитация клика по какому-то месту, это посылка сообщения контролу. Мышь тут вообще ни при чём, просто контрол думает что по нему кликнули мышкой, хотя этого не было. Другими словами, это просто вызов кода обработчика события OnClick.
Отправлять нужно тому компоненту, по которому хотим кликнуть, а не форме.

А как вообще поиск происходит? Есть подозрения, что просто по findwindow/ex с указанием класса без учёта того, что есть несколько таких дочерних компонентов.

По поводу тех контролов у которых нет хендла - посылать sendmessage некуда, тут уж ничего не поделать. Либо имитировать клик (например, Mouse_Event), либо в код программы вмешиваться, либо ещё как. А это уже чисто индивидуально для каждой программы.
eoln вне форума Ответить с цитированием
Старый 07.11.2014, 01:58   #15
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от MaxXx_1 Посмотреть сообщение
Ну не щёлкает он блин ни как ни щёлкает. Уже устал бится головой об стол. Кто нибудь может дать внятный ответ? 3 форума и одни бла бла бла
Код:
procedure Poshla;
var
w1:THandle;
begin
W1 := FindWindow('TPanel', ' WР Рackеt Cоnvеrtеr v7.6');
if W1 <> 0 then
begin
sendmessage(w1, WM_LBUTTONDBLCLK, 10, 10);
ShowMessage('+');
end
else
ShowMessage('-');
Может кто нибудь дать реальный код как произвести щелчок мыши в другом окне? Находить находит но не щёлкает в упор, ни одинарный ни двойной, вобще ни как, свернуто развёрнуто, разные координаты. Что не так? Подскажите.
Что-то я не пойму ничего. В заголовке темы SpeedButton. А в данном коде ищется окно класса TPanel с заголовком WР Рackеt Cоnvеrtеr v7.6
Как это понимать, Саид?
northener вне форума Ответить с цитированием
Старый 07.11.2014, 16:59   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо SpeedButton на этой панели. А что вы предлагаете искать? SpeedButton это не обычная стандартная кнопка, а TGraphicControl, оно не имеет хэндла.

Мне когда-то надо было автоматизировать пару действий в древней Дельфийской программе без исходников, там тоже были SpeedButton. Я просто отправлял WM_LBUTTONDOWN и WM_LBUTTONUP с координатами кнопки ее родителю (панели), все работало. Координаты конечно должны быть относительно панели.
Окно программы было скрыто (ShowWindow SW_HIDE).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 07.11.2014 в 17:08.
Alex11223 вне форума Ответить с цитированием
Старый 07.11.2014, 18:39   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В свернутом окне SpeedButton на WM_LBUTTONDOWN и WM_LBUTTONUP по его координатам не реагирует. Но при разворачивании окна срабатывает вся серия посланных сообщений. Проверил в д7, контейнер SpeedButton-а непосредственно форма
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как победить? sdr1 Общие вопросы Delphi 14 06.10.2014 17:29
Загрузка функции из dll, как победить RunTime Winexcel Общие вопросы Delphi 4 01.07.2014 13:40
страница влево уползает, как победить? booratino HTML и CSS 6 20.03.2012 15:17
как перехватить чужой процесс Assemblerru Win Api 8 28.09.2010 20:07
SpeedButton как вкладки Zo0M Общие вопросы Delphi 0 20.02.2010 12:25