Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 947

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Подскажите пожалуйста как написать, что бы при клике на кнопку в моей программе, кнопка в чужом процессе нажималась программно, при этом если она находится на другом компаненте например на TPageControl. Ниже приведен текст нажатия кнопки на простой форме, без лишнего компонента.

Приложение:
  1. var h1,h2:HWND;
  2. begin
  3. h1:=FindWindow(nil,'Form1');
  4. h2:=FindWindowEx(h1,0,'TButton','Button2');
  5. SendMessage(h2,WM_LBUTTONDOWN,1,1);
  6. SendMessage(h2,WM_LBUTTONUP,1,1);
  7. end;


Demosha Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Demosha (статус: Посетитель)
Вопрос отправлен: 24 июня 2009, 20:04
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Паровоз

Здравствуйте, Demosha!
Вам нужно продолжить цепочку вызывов FindWindowEx вдоль цепочки родителей кнопки
h:=FindWindow(nil,'Form1');
h:=FindWindowEx(h,0,nParenClass,nParentName');
h:=FindWindowEx(h,0,(n-1)ParenClass,(n-1)ParentName');
h:=FindWindowEx(h,0,(n-2)ParenClass,(n-2)ParentName');
.......................................
h:=FindWindowEx(h,0,'TButton','Button2');

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 24 июня 2009, 21:50


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 25 июня 2009, 22:58; участников в обсуждении: 3.
Паровоз

Паровоз (статус: 10-ый класс), 24 июня 2009, 21:57 [#1]:

Дополнение. Например если кнопка лежит на TPageControl:

h:=FindWindow(nil,'Form1');
h:=FindWindowEx(h,0,'TPageControl','PageControl1');
h:=FindWindowEx(h,0,'TButton','Button2');
SendMessage(h,WM_LBUTTONDOWN,1,1);
SendMessage(h,WM_LBUTTONUP,1,1);
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 01:38 [#2]:

var h1,h2,h3,h4:HWND;
begin
h1:=FindWindow(nil,'Form4');
h2:=FindWindowEx(h1,0,'TPageControl','PageControl1');
h3:=FindWindowEx(h2,0,'TTabSheet','TabSheet1');
h4:=FindWindowEx(h3,0,'TButton','Button1');
SendMessage(h,WM_LBUTTONDOWN,1,1);
SendMessage(h,WM_LBUTTONUP,1,1);
end;
---------------не работает!!!!!!!!!!!!----------------------
var h:HWND;
begin
h:=FindWindow(nil,'Form4');
h2:=FindWindowEx(h1,0,'TPageControl','PageControl1');
h:=FindWindowEx(h,0,'TTabSheet','TabSheet1');
h:=FindWindowEx(h,0,'TButton','Button1');
SendMessage(h,WM_LBUTTONDOWN,1,1);
SendMessage(h,WM_LBUTTONUP,1,1);
end;

-----------тоже не работает!!!!!!!!!!!!---------------------
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 июня 2009, 05:56 [#3]:

Попробуйте заменить написанное Вами в последнем сообщении 'Button1' на написанное Вами же в вопросе 'Button2'.
На чем написана программа, окнами которой пытаетесь управлять?
Уверены, что компоненты называются именно так, как Вы пишите?
Паровоз

Паровоз (статус: 10-ый класс), 25 июня 2009, 11:43 [#4]:

Прежде чем что-то писать рекомендую запустить Spy или WinSight чтобы проверить нужную цепочку окон и получить их классы и заголовки.
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 12:16 [#5]:

1. Делаю прогу в Делфи (Форму (Form4), на ней PageControl1, создаю вкладку TabSheet1, на вкладки делаю Button1, код кнопки (Form4.close;) компилирую ее.
2. Создаю 2-ую прогу в Делфи (Форма, на ней кнопка с кодом:
var h1,h2,h3,h4:HWND;
begin
h1:=FindWindow(nil,'Form4');
h2:=FindWindowEx(h1,0,'TPageControl','PageControl1');
h3:=FindWindowEx(h2,0,'TTabSheet','TabSheet1');
h4:=FindWindowEx(h3,0,'TButton','Button1');
SendMessage(h,WM_LBUTTONDOWN,1,1);
SendMessage(h,WM_LBUTTONUP,1,1);
end;

Не работает и все тут, если не трудно попробуйте сами провернуть тоже. Может я реально туплю. Delphi 2009
Паровоз

Паровоз (статус: 10-ый класс), 25 июня 2009, 12:54 [#6]:

Замените строку
h2:=FindWindowEx(h1,0,'TPageControl','PageControl1');
на
h2:=FindWindowEx(h1,0,'TPageControl',nil);
и в последних двух строках h на h4
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 13:18 [#7]:

Спасибо ОГРОМНОЕ!!! Работает.
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 13:52 [#8]:

А если управляемая прога Ammyy Admin v2.9 там есть кнопка Запустить. тогда как? http://www.ammyy.com/AMMYY_Admin.exe посмотрел ее классы попробовал написать, но не работает, в отличии от Дельфиской PageControl и TabSheet, есть одна SysTabControl32 с двумя вкладками, но в WinSight вкладки не видны. Ammyy Admin - администраторская прога удаленного доступа весит 536 kb
Паровоз

Паровоз (статус: 10-ый класс), 25 июня 2009, 14:15 [#9]:

Если внимательно посмотреть, то родителем кнопки является не PageControl и TabSheet а сама Ammyy Admin. Поэтому нажатие кнопки делается так:
h:=FindWindow('#32770','Ammyy Admin v2.9');
h:=FindWindowEx(h,0,'Button','Запустить');
SendMessage(h,WM_LBUTTONDOWN,1,1);
SendMessage(h,WM_LBUTTONUP,1,1);
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 14:56 [#10]:

Опачки, на это и не взглянул, смотрел на чем визуально находится кнопка. Если можно совсем понаглеть? Вопросик как сделать внешнюю прогу не видимой (как визуально так и в панели запуска) Спасибо еще раз!!! Лично от меня, что не забил на меня +10)))
Паровоз

Паровоз (статус: 10-ый класс), 25 июня 2009, 16:11 [#11]:

Это уже другой вопрос и задавайте его в новой ветке.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 июня 2009, 17:24 [#12]:

Дальнейшее попахивает уже попыткой создания трояна.
Demosha

Demosha (статус: Посетитель), 25 июня 2009, 19:58 [#13]:

им самым, только на блогие цели
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 июня 2009, 20:43 [#14]:

как это до боли знакомо "цель оправдывает средства". Только это заблуждение. Почитайте историю.
Паровоз

Паровоз (статус: 10-ый класс), 25 июня 2009, 22:58 [#15]:

To Demosha:
"Лично от меня, что не забил на меня +10"
Что-то я не вижу ни оценки за ответ на вопрос, ни изменения своей репутации.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.02 сек.