|
Вопрос # 2 947/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста как написать, что бы при клике на кнопку в моей программе, кнопка в чужом процессе нажималась программно, при этом если она находится на другом компаненте например на TPageControl. Ниже приведен текст нажатия кнопки на простой форме, без лишнего компонента.
Приложение: Переключить в обычный режим- var h1,h2:HWND;
- begin
- h1:=FindWindow(nil,'Form1');
- h2:=FindWindowEx(h1,0,'TButton','Button2');
- SendMessage(h2,WM_LBUTTONDOWN,1,1);
- SendMessage(h2,WM_LBUTTONUP,1,1);
- end;
 |
Вопрос задал: 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 (статус: Посетитель), 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 (статус: Посетитель), 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 (статус: Посетитель), 25 июня 2009, 13:18 [#7]:
Спасибо ОГРОМНОЕ!!! Работает.
|
|
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 (статус: Посетитель), 25 июня 2009, 14:56 [#10]:
Опачки, на это и не взглянул, смотрел на чем визуально находится кнопка. Если можно совсем понаглеть? Вопросик как сделать внешнюю прогу не видимой (как визуально так и в панели запуска) Спасибо еще раз!!! Лично от меня, что не забил на меня +10)))
|
|
Паровоз (статус: 10-ый класс), 25 июня 2009, 16:11 [#11]:
Это уже другой вопрос и задавайте его в новой ветке.
|
|
Мережников Андрей (статус: Абитуриент), 25 июня 2009, 17:24 [#12]:
Дальнейшее попахивает уже попыткой создания трояна.
|
|
Demosha (статус: Посетитель), 25 июня 2009, 19:58 [#13]:
им самым, только на блогие цели
|
|
Мережников Андрей (статус: Абитуриент), 25 июня 2009, 20:43 [#14]:
как это до боли знакомо "цель оправдывает средства". Только это заблуждение. Почитайте историю.
|
|
Паровоз (статус: 10-ый класс), 25 июня 2009, 22:58 [#15]:
To Demosha:
"Лично от меня, что не забил на меня +10"
Что-то я не вижу ни оценки за ответ на вопрос, ни изменения своей репутации.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|