![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
ReFleX |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: нет Всего: 3 |
Добрый день!
Рылся по форуму, но везде из подобных найденных тем в примерах используется библиотека которая отслеживает хук. Из кучи примеров у меня получилось собрать именно тот который мне нужен: DLL:
EXE
Вопрос остаётся тот же, возможно ли объеденить DLL вместе с EXE? Просто не очень хочеться тоскать библиотеку, пускай лучше EXE будет немного больше. Я слышал, что microsoft позволяет работать с Hook как в DLL так и для EXE, но примера я нигде не нашёл, решил обратиться с помощью на любимый форум. ![]() |
||||
|
|||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
Попробуйте вот так
char* DllFile = "HookExe.exe"; // и перенесите все функции в EXE |
|||
|
||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: нет Всего: 3 |
Не думаю что это будет правильно...
![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
А такой хук не всегда требует нахождения функции-фильтра в отдельной длл-ке. Можно устанавливать и в своем приложении. Только и ловится будут свои сообщения.
|
|||
|
||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: нет Всего: 3 |
Мне надо чтобы ловились нажатия клавиш вне программы, этого я добился, но так же нужно чтобы библиотеки небыло, чтобы не таскаться с ней.
|
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Все системные хуки и хуки для потоков в другом приложении должны находиться в DLL.
|
|||
|
||||
Dude03 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: 1 Всего: 6 |
А в чем проблема?=) Почему нельзя загружать либу из ресурсов приложения. Пусть тебя не смущает асм-код. Просто посмотри какие надо юзать функции(их имена после invoke):
|
||||
|
|||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: нет Всего: 3 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Эта DLL, содержащаю хук, должна подгружаться во все процессы, в которых будет выполняться код, так что
anwe прав: только локальные хуки можно ставить, используя процедуру, которая находится в EXE.
-------------------- ... |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 10 Всего: 124 |
Остаётся лишь распознать вызов LoadLibrary (по третьему параметру) и подкорректировать стек. Не так велики ухищрения. Сделать можно. Естественно, Entry Point должна быть своя — не та, что берётся из CRT0.C и CRTDLL.C, например (имена файлов VC). |
|||
|
||||
ReFleX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 26.9.2004 Где: Таллинн Репутация: нет Всего: 3 |
||||
|
||||
v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
Вероятно это уже не актуально, но я хотел бы поделиться своими изыскаиями в области перехвата нажатия кнопки клавиатуры.
Не обязательно создавать длл для перехвата нажатий в текущем окне, но вот если вы хотите перехватывать нажатия из других окон... единственный выход - это длл. Если кому то интересно, могу выложитькод, где я перехватываю нажатия выполненные в этом окне |
|||
|
||||
Yra |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 12.9.2006 Где: Украина, Киев Репутация: нет Всего: нет |
||||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
погавариват что есть еще и хуки низкого уровня... и они не требуют типа без длл. Я честно маловерю) хотите - проверяйте) да и на делфях)...
а вообще можно и поэксперементировать с Dll-Exe-шкой)) SergeCpp писал... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Подмена адресов в SDT чтоли? Как бы там ни было, вы должны понять, что когда устанавливается хук в чужом адресном пространстве должен находится Ваш модуль. Dll можно легко подгрузить в чужое адресное пространство, там все смещения вычисляются с учётом поправок(reloc), т.е. базовый адрес dll в адресном пространстве процесса может быть динамическим. А вот подгрузить Exe уже не так просто, нужно учесть кучу тонкостей PE формата, мне даже лень перечислять все. А сделать так, чтобы твой exe работал параллельно с основным в одном процессе вообще гиблая идея. Это сообщение отредактировал(а) W4FhLF - 3.1.2007, 08:52 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |