Для перехвата сообщений я заменял адрес процедуры обработки сообщений через
SetWindowLong(hwnd, GWL_WNDPROC, (ULONG) &MyWindowProc);
Но, как оказалось, в некоторых програмках этот метод не проходит, так как адрес процедуры после создания окна изменяется, а старые обработчики не вызываются, и, соответственно,не вызывается моя функция MyWindowProс.
Посоветуйте, как выйти из этого положения (желательно без использования хуков).
Здравствуйте, Shurik77, Вы писали:
S>Для перехвата сообщений я заменял адрес процедуры обработки сообщений через S>SetWindowLong(hwnd, GWL_WNDPROC, (ULONG) &MyWindowProc); S>Но, как оказалось, в некоторых програмках этот метод не проходит, так как адрес процедуры после создания окна изменяется, а старые обработчики не вызываются, и, соответственно,не вызывается моя функция MyWindowProс.
Что-то, по-моему у тебя просто не подменилось, GetLastError что показывает?
S>Посоветуйте, как выйти из этого положения (желательно без использования хуков).
WinMain можно подменить только будучи в ее процессе, то есть если пытаешься менять в чужом, то сначала в него надо внедриться , как? примеров много и на сайте и у Рихтера
Здравствуйте, Shurik77, Вы писали:
S>В процесс я внедрился, и адрес заменяется, даже первые несколько сообщений обрабатываются, но потом все прекращается
Перехватить функцию SetWindowLong, скорее всего не получиться, поскольку библиотека user32 подключается динамичски, поэтому, например в таблице импорта нет адреса этой функции.
Здравствуйте, Shurik77, Вы писали:
S>Перехватить функцию SetWindowLong, скорее всего не получиться, поскольку библиотека user32 подключается динамичски, поэтому, например в таблице импорта нет адреса этой функции.
Можно поменять таблицу экспорта user32. Можно посткпть совсем грубо — поменять первые несколько байт SetWindowLong на переход к своей реализации. Но такое я не люблю.