Вопрос № 62904: Здравствуйте эксперты.
Хочу заменить WndProc у рабочего стола на свой собственный(В МИРНЫХ ЦЕЛЯХ). Как это осуществить?
PS желательно с примером на Delphi или C++.
PSPS знаю что это делается с помощью SetWindowLong, но незнаю как ей польз...
Вопрос № 62.904
Здравствуйте эксперты.
Хочу заменить WndProc у рабочего стола на свой собственный(В МИРНЫХ ЦЕЛЯХ). Как это осуществить?
PS желательно с примером на Delphi или C++.
PSPS знаю что это делается с помощью SetWindowLong, но незнаю как ей пользоваться.
Зарание спасибо.
Отправлен: 16.11.2006, 18:28
Вопрос задал: _Alex_ (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Sergey A. Wedensky
Здравствуйте, _Alex_!
LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
В Вашем случае nIndex == GWL_WNDPROC. Однако в NT/XP/2000 и иже с ними
у Вас ничего не получится, если окно hWnd принадлежит другому
процессу, нежели поток, вызывающий SetWindowLong.
А по сему (в форуме уже звучали слова о хуках...):
выход - создать DLL, в ней hook-функцию (например, на WH_CALLWNDPROC),
подгрузить ее, установить хук, и в нем заменить WndProc.
Т.е. вызов SetWindowLong будет в DLL, которая будет подгружена в
процесс, создавший окно десктопа (explorer.exe, если не ошибаюсь).
Метод работает, проверено, в свое время ровно таким способом
переопределял поведение часиков в системном трее.
Могу поделиться кодом, пишите (sergey_wedensky@srisa.ru).
Удачи!
Ответ отправил: Sergey A. Wedensky (статус: 8-ой класс)
Ответ отправлен: 17.11.2006, 09:45 Оценка за ответ: 5 Комментарий оценки: Большое спасибо. Идею понял, а кодик пригадился бы.