Сейчас на форуме: tyns777, zombi-vadim, zds (+4 невидимых)

 eXeL@B —› Программирование —› Можно ли симитировать клик на конкретном поле в меню?
Посл.ответ Сообщение

Ранг: 3.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 июня 2013 04:15
· Личное сообщение · #1

Программа на делфи. Сам пишу на делфи. В Делфи есть возможность перенаправить щелчок на кнопке процедурой BtnXClick(sender), можно ли такое сделать из кода дизассемлированной программы? Т.е. мне фактически надо заменить в программе клик по одной кнопке, кликом по другой. Но вся сложность в том что пункт меню, щелчек по которой надо инициализировать создается динамически, процедуру обработку щелчка по всем подобным кнопкам я нашел (это кнопки плагинов и их много). Т.к. процедура обработки всех кнопок плагинов одна, мне надо имитировать нажатие именно той кнопки которая нужна, как будто бы человек щелкнул по ней мышкой, как это сделать?



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 03 июня 2013 08:48 · Поправил: Veliant
· Личное сообщение · #2

Используя GetMenu/GetSubMenu/GetMenuItemInfo ищи с нужным текстом, потом CheckMenuItem.
И вообще это не кнопки, а пункты меню.

Как вариант найти функцию, которая вызывается по клику и вызвать ее напрямую.



Ранг: 3.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 июня 2013 09:05
· Личное сообщение · #3

Ну как найти более менее понял. Но говорю же что функция обработки нескольких кнопок одна. А мне надо сделать так, чтобы программа думала, что пользователь щелкнул именно по той кнопке которой надо. Но как такое можно сделать на ассемблере?




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 03 июня 2013 09:10
· Личное сообщение · #4

yarcom пишет:
чтобы программа думала, что пользователь щелкнул именно по той кнопке которой надо

Вызвать с нужными параметрами.



Ранг: 3.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 июня 2013 10:19 · Поправил: yarcom
· Личное сообщение · #5

Dart Sergius пишет:
Вызвать с нужными параметрами.

Логично... Мог бы и сам догадаться...
А можно чуть поподробнее. Я создал программку для примера с тремя кнопками. вот текст кнопку Которая по очереди посылает команды щелчков на первую и вторую кнопку. Можно чуть подробнее, что и за что тут отвечает? Откуда берутся адреса кнопок? И как мне найти в своей программе нужную?

Code:
  1. 0044F0EC   53                     push    ebx
  2. 0044F0ED   56                     push    esi
  3. 0044F0EE   8BF2                   mov     esi, edx
  4. 0044F0F0   8BD8                   mov     ebx, eax
  5. 0044F0F2   8BD6                   mov     edx, esi
  6. 0044F0F4   8BC3                   mov     eax, ebx
  7.  
  8. * Reference to : TForm1.Button1Click()
  9. |
  10. 0044F0F6   E8B1FFFFFF             call    0044F0AC
  11. 0044F0FB   8BD6                   mov     edx, esi
  12. 0044F0FD   8BC3                   mov     eax, ebx
  13.  
  14. * Reference to : TForm1.Button2Click()
  15. |
  16. 0044F0FF   E8C8FFFFFF             call    0044F0CC
  17. 0044F104   5E                     pop     esi
  18. 0044F105   5B                     pop     ebx
  19. 0044F106   C3                     ret





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 03 июня 2013 10:46
· Личное сообщение · #6

yarcom засунь подопытную прогу в IDR, Dede, может чего полезного выдадут.
а вообще выкладывай софт.

-----
[nice coder and reverser]




Ранг: 3.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 июня 2013 10:51
· Личное сообщение · #7

Hellspawn пишет:
засунь подопытную прогу в IDR, Dede, может чего полезного выдадут.
а вообще выкладывай софт.
Это первое что я сделал. Вся проблема что кнопки меню создаются динамически и всем кнопкам вешается одна процедура исполнения. Отличия только в том, на какой именно кнопке идет щелчек, от этого, скорее всего по индексу кнопки идет пляска. Программу выложить не могу к сожалению. Она запускается только при наличии соответствующей БД и является гос.разработкой. Мне бы просто понять на словах как это делается... (имитация щелчков)




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 03 июня 2013 11:02 · Поправил: Dart Sergius
· Личное сообщение · #8

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

Ну и естественно надо посмотреть как она узнает что нажали. Мб надо будет кое-где подправить память чтобы она думала что нажали нужную кнопку.

| Сообщение посчитали полезным: yarcom

Ранг: 3.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 июня 2013 11:20
· Личное сообщение · #9

Dart Sergius пишет:
брякаешься на функции обработчике, и смотришь что в стеке на вызовах. Как с одной кнопки, так и с другой.
хмм.. про стек забыл. Попробую. Спасибо.

Dart Sergius пишет:Ну и естественно надо посмотреть как она узнает что нажали. Мб надо будет кое-где подправить память чтобы она думала что нажали нужную кнопку. А вот тут сложнее... Хотелось бы сделать все через битхак, т.е. статично. Но все больше убеждаюсь что это врядли получится...




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 03 июня 2013 11:24
· Личное сообщение · #10

yarcom никакой сложности не вижу, это же дельфи, нужно лишь подменить обработчик. как создается - статически или динамически фиолетово. ну тогда или сам делай или teamviewer.

можно выложить базу от Ida.

-----
[nice coder and reverser]




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 04 июня 2013 14:42
· Личное сообщение · #11

Hellspawn
Или проект от IDR



Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 06 июня 2013 18:42 · Поправил: tomac
· Личное сообщение · #12

yarcom пишет:
хмм.. про стек забыл.

На этом месте подавился.

В делфе, если мне не изменяет память, как один из аргументов события идет sender: TObject, который собственно и является тем объектом, который инициировал событие (в данном случае итем меню). Вот в нем что-то лежит. Что именно, определяется либо по имени, либо по индексу в каком-то списке, либо по tag'у (есть он там или нет, не помню). Вот и смотри, как этот параметр используется и как делается выбор, что же это за пункт меню.

И не забывай про calling convention - в делфе - borland fastcall.


 eXeL@B —› Программирование —› Можно ли симитировать клик на конкретном поле в меню?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати