Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запустить процедуру в чужом процессе


Страницы:   1 2

Chorniy ©   (2008-03-03 11:40:00) 

Все еще пытаюсь "кликнуть" мышкой по окну игры, которое не обрабатывает сообщения виндовс.

Имеем:
Запущенную игру (известен ID процесса), название и сдвиг процедуры клика мышки внутри чужого процесса (скажем ClickXY).

Вопрос:
Есть ли способ запустить эту процедуру внутри чужого процесса? Или каким-нибудь образом переставить точку выполнения с одной команды на другую? Вот дебаггеры же умеют вроде так делать... В сторону каких процедур копать и что почитать по этой теме?


Palladin   (2008-03-03 15:05:00) [1]


> Chorniy   (03.03.08 14:44) [25]

ну все, теперь ты обязан ее купить, а еслив не купишь, то... ну в doom, я думаю, играл... надпись видел....


Sapersky   (2008-03-03 14:51:00) [2]

здесь ее не будет. только в магазин.

Что ж так сурово. Один из местных админов ещё в 2005 г выложил и не особо это скрывает:
http://rouse.drkb.ru/books.php
Глава называется, насколько помню, "Внедрение DLL и перехват API-функций". Про DirectInput там, конечно, ничего нет, но для понимания общих принципов полезно.


Chorniy   (2008-03-03 14:44:00) [3]


> достаточно установить в своем тестовом мышином DI-приложении
> уровень кооперации = exclusive

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


Palladin   (2008-03-03 14:42:00) [4]

здесь ее не будет. только в магазин.


Chorniy   (2008-03-03 14:38:00) [5]


> Но это легко проверить, перехватив как раз с пом. SetWindowLong
> штатную оконную ф-цию

О!!!! так и поступлю. самое оно чтобы проверить.


> см. в известной книге Рихтера

к своему стыду (хотя все говорят о ней) не читал..есть ли ссылочка откуда скачать. или тока в магазин идти?


Сергей М.   (2008-03-03 14:35:00) [6]

Собссно если следы ведут в сторону DI, то проверить это проще простого - достаточно установить в своем тестовом мышином DI-приложении уровень кооперации = exclusive на доступ к мышиному дивайсу, после чего попытаться запустить цацку , которая обязана грязно выругаться по поводу невозможности получить доступ к DI-интерфейсу этого дивайса.


Sapersky   (2008-03-03 14:24:00) [7]

> mouse_event пробовал
я напрямик слал туда WM_LBUTTONDOWN и WM_LBUTTONUP.. ноль результата.


Может, mouse_event работает не через сообщения.

а вот ДиректИнпут там вполне может использоваться... а есть возможность его перехвата/послыки?

Возможность есть. Теория внедрения/перехвата (если не в курсе, что это такое) - см. в известной книге Рихтера.
Практический пример - в библиотеке madCodeHook есть перехват методов интерфейсов Direct3D, c DirectInput можно сделать аналогично.


Сергей М.   (2008-03-03 14:21:00) [8]


> она с мышкой работает как-то..но минуя Messages виндовса
>


Крайне маловероятно.

Но это легко проверить, перехватив как раз с пом. SetWindowLong штатную оконную ф-цию и не пуская эти сообщения на обработку штатной ф-ции


Chorniy   (2008-03-03 14:15:00) [9]

То есть она с мышкой работает как-то..но минуя Messages виндовса


Chorniy   (2008-03-03 14:14:00) [10]


> что цацка никак не обрабатывает это сообщение

дак в том и фишка, что када вручную кликаешь, то все замечательно... а вот из своей проги не могу сымитировать.


Сергей М.   (2008-03-03 14:12:00) [11]


> как мне разместить свою процедуру в адресном пространстве
> чужого процесса? DLL?


Как один из возможных способов - да.


> надо както запустить родной для игры механизм обработки
> мыши... то есть некую процедуру


Откуда ж она там возьмется. если ты сам говоришь, что цацка никак не обрабатывает это сообщение ?


Chorniy   (2008-03-03 14:10:00) [12]


> mouse_event пробовал

я напрямик слал туда WM_LBUTTONDOWN и WM_LBUTTONUP.. ноль результата.

а вот ДиректИнпут там вполне может использоваться... а есть возможность его перехвата/послыки?


Sapersky   (2008-03-03 14:08:00) [13]

mouse_event пробовал?
Если не работает, можно попробовать перехват интерфейсов (точнее, методов интерфейсов) DirectInput, хотя это довольно сложное и муторное занятие.


Chorniy   (2008-03-03 14:00:00) [14]

Кстати..я еще не дочитал всю справку, однако пока темка свежа:

1. С помощью SetWindowLong я сменю адрес оконной процедуры (т.е. той которая обрабатывает сообщения виндовс)

2. А на какой адрес ево менять? то есть как мне разместить свою процедуру в адресном пространстве чужого процесса? DLL?

3. И что мне делать-то с этим сообщением? То есть я в своей процедуре получаю скажем: WM_LBUTTONDOWN в точке 120х437, теперь надо както запустить родной для игры механизм обработки мыши... то есть некую процедуру, которая может находиться даже в другом потоке (а вдруг мышка обрабатывается в обход виндовс-сообщений в отдельном потоке?)


Washington   (2008-03-03 13:53:00) [15]

по фазе наверное


Сергей М.   (2008-03-03 13:41:00) [16]


> вдруг да она экспортируемая


За каким лешим экспортировать оконную функцию ?)


> подозреваю, что найти сдвиг процедуры не так уж и сложно


Что такое "сдвиг" ? Смещение что ли ? Тогда отн-но чего ты желаешь получить этот "сдвиг" ?


Chorniy   (2008-03-03 13:38:00) [17]


> У тебя в этом PE-файле хранятся имена неэкспортируемых процедур
> ?

нет. а вдруг да она экспортируемая ;)))) ну всерно подозреваю, что найти сдвиг процедуры не так уж и сложно.

всем спс за ответ. ушел читать надолго )


Сергей М.   (2008-03-03 13:36:00) [18]

Впрочем, и для интересующих тоже, иначе грабли неминуемы


Сергей М.   (2008-03-03 13:35:00) [19]


> там наверняка регистры процессора сохранять надо


Нет.

"Там" следует сохранять результат предварительного вызова GetWindowLong, чтобы для всех неинтересующих тебя сообщений вызвать "родную" оконную функцию


Сергей М.   (2008-03-03 13:33:00) [20]


> ну из PE файла


У тебя в этом PE-файле хранятся имена неэкспортируемых процедур ?

Вот это номер)


> какого именно ряда условий


Справку ты уже проштудировал ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо