| 
| 
 | Вопрос # 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"
 Что-то я не вижу ни оценки за ответ на вопрос, ни изменения своей репутации.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |